Auto Bidding Based on First Party and External Data Sets

Smart Bidding in Google Ads is useful until it is not. It is a general purpose optimiser trained on general data, which often means it over weights conversions that are easy to get, not necessarily profitable. If you have rich first party data like CRM stages, LTV, margin variation or refund history, then you already have more intelligence than Google does. The question is whether you are using it. In this article, I show how I build auto bidding logic that replaces or augments Smart Bidding using your own data.

Introduction: Smart Bidding Is Not Always Smart

Smart Bidding in Google Ads is useful until it is not. It is a general purpose optimiser trained on general data, which often means it over weights conversions that are easy to get, not necessarily profitable. If you have rich first party data like CRM stages, LTV, margin variation or refund history, then you already have more intelligence than Google does. The question is whether you are using it.

In this article, I show how I build auto bidding logic that replaces or augments Smart Bidding using your own data. Whether in eCommerce or SaaS, I connect Google Ads to CRM or warehouse systems using the API, feed in structured revenue signals, and programmatically update campaign or ad group level bids based on what actually drives profit.

Feeding First Party Conversion Data Back Into Google Ads

By default, Google only sees conversions like signups or purchases. It does not see refund status, upsell, or contract churn. To close this loop, I regularly import offline conversions using the Google Ads API. I match conversions using the gclid captured on click.

In a Ruby app using the google ads ruby gem, you can structure the upload to include the gclid, conversion action, and value. The gclid must be captured and stored at conversion time. I usually include it in the signup or purchase model in the backend, then enrich the conversion with LTV or refund flags before upload.

Bid Boosting Based on CRM Status or Product Usage

One client wanted to prioritise traffic that led to high quality SaaS trials. But conversion tracking only reflected the initial signup. Using a CRM webhook (in this case, HubSpot), I triggered bid modifier logic once the lead reached a marketing qualified stage.

I used a Python script to automate campaign level bid increases via the Google Ads API. The key is synchronisation: every 24 hours, we poll the CRM, extract IDs that meet the behavioural trigger, and push updated bid values.

Adjusting Bids by Stock Levels and Margins

In eCommerce, the actual value of a sale depends on profit margin and inventory level. There is no point aggressively bidding on products that are low margin or nearly out of stock.

I work with clients to pipe stock data from Shopify, WooCommerce or ERP into a local margin table. I then calculate target CPC thresholds:

  • High margin and high inventory: bid aggressively
  • Low margin or low inventory: restrict bid

These modifiers are applied at the product group level using the Google Ads Shopping API. This creates a dynamic bidding layer where economics drive spend, not guesswork.

Final Thought: Build Your Own Brain

Smart Bidding is a one size fits most solution. If you are serious about growth, and especially if you have access to better internal signals than Google does, it is time to take control.

I use structured automation and API driven logic to tie real business signals, user behaviour, purchase quality, inventory state, to bidding outcomes. The result is higher profit per click, more stability, and far less waste.

If you want to build a bidding engine that actually understands your business, not just your clickstream, I can help you get started with the logic, the code, and the integration path tailored to your stack.

Smart Bidding not delivering the profit you expected? I can help you build custom bidding logic that uses your first party data to drive real business outcomes. Let's make your ad spend smarter.

Auto Bidding Based on First Party and External Data Sets - Georg Keferböck