Offline conversion upload, deduplicated server-side events and the API work no connector covers — built idempotent, auditable and inside your own infrastructure.
About this service
Most of what we get asked to build already exists in a paid connector, and we say so on the first call: if Fivetran or Airbyte already reads it, buy it, and spend the difference on the write path instead. Roughly two thirds of the integration briefs we receive end that way. What we take on is the awkward half of the API surface, where no vendor has bothered and where a mistake is expensive.
The write path:
Offline conversion upload to Google Ads keyed on GCLID, GBRAID or WBRAID, with the click timezone handled explicitly, because a conversion timestamped in the wrong zone lands outside the upload window and fails silently at the edges of the month. Enhanced conversions for leads with identifiers normalised before hashing, since an untrimmed uppercase email hashes to a value that matches nothing and reports as accepted. Meta Conversions API with event_id, fbp and fbc set so server events deduplicate against the browser pixel rather than inflating both. Where a CRM holds the outcome, the qualified or closed stage is what we send, not the form fill.
Reliability:
Every request and response is stored as raw JSON against a deterministic request key, so a failed run replays without double-counting and any number can be traced back to the exact payload that produced it. Backoff follows the platform's own usage headers instead of a fixed sleep, which is the difference between a job that degrades for an hour and an account that gets throttled for a day. Batch mutations are checked operation by operation: a batch returning HTTP 200 while twelve of its operations failed is the most common silent defect we find in inherited code, and it can run for months before anyone notices the gap.
Governance:
For financial services and crypto accounts, a field-level allowlist governs what may leave the warehouse for any ad platform, hashing happens before egress, and the list is signed by whoever carries the accountability for it. Every write-back has a dry-run mode and an audit table showing what was sent, when, by which version of the code. Restricted-category rules are checked before the first upload, not after an account gets flagged, which for exchange clients has twice changed what we were willing to send at all.
What we refuse:
No scraping of platform interfaces or undocumented endpoints; it breaks, it violates terms, and it puts an ad account at risk that funds a business. No rebuilding a connector that is sold for a few hundred dollars a month. No write-back to a live account before a dry run has been reviewed by a human on your side. We do not take a position on which platforms you should be buying; that is your media team's decision and we build against it.
Who this is not for:
Teams without a warehouse or a defined source of truth, since a write path needs something correct to write from. Companies wanting an internal ads dashboard, which is reporting work rather than integration work. Anyone expecting the integration to improve performance by itself; feeding better conversion data to a bidding algorithm changes what it optimises toward, and whether that helps depends on your funnel, not on our code.
What you receive:
Source in your repository, deployed to your infrastructure, with credentials in your secret manager and never in ours. Documentation covers token refresh and consent expiry, the fields each platform receives, the replay procedure, and what breaks when a platform ships a breaking API version, which happens on a schedule you can plan around.