Skip to content

Ads operations platform

Campaign ops for agencies and advertisers.

Connect Google Ads with OAuth, run paused and dry-run campaign work, and keep reporting on a multi-channel foundation — only for accounts you authorize. Google Ads and GA4 Connect are live. Clarity, Meta, TikTok, and LinkedIn are schema-ready.

  • Google Adslive
  • GA4live
  • Clarity
  • Meta
  • TikTok
  • LinkedIn

Ops tools, not autopilot. No spend without an explicit confirm.

What it does

Tools for operators, not a black box.

01

Connect what you authorize

OAuth for Google Ads and GA4 on the same grant (Ads + analytics.readonly + analytics.edit). Tokens are encrypted in Postgres. There is no file-token path, and Adrunr only touches accounts you approve.

02

Operate without autopilot

Create Search, Display, Performance Max, Demand Gen, Video, Shopping, App, Hotel, Local, and Local Services campaigns as PAUSED. Dry-run (validateOnly) is the default. Sync live listings and budget/spend snapshots into Neon as a read-only cache — never enable, unpause, or spend. A budgeted campaign still cannot spend until you enable it outside Adrunr.

03

Grow across channels

Google Ads and GA4 Connect are live today. Microsoft Clarity, Meta, TikTok, LinkedIn, Heartza, and Custom sit on the same provider registry — schema-ready stubs, not a rewrite later.

Safety

Ops tools, not autopilot. No spend without an explicit confirm.

  • Developer token is Test Account access until Basic Access is approved. Production MCC reads can fail or be limited.
  • New Search, Display, Performance Max, Demand Gen, Video, Shopping, App, Hotel, Local, and Local Services campaigns are created PAUSED. Dry-run (validateOnly) is the default and preferred path.
  • No enable/go-live action. A paused campaign with a budget still cannot spend until separately enabled outside this app.
  • Listings sync is read-only. It pulls campaign / ad group / ad / keyword snapshots into Neon and never enables, unpauses, or mutates live Ads status.
  • Metrics sync is read-only. It pulls campaign budget and spend snapshots into Neon and never enables, unpauses, mutates status, or spends.
  • Safe campaign edit is validateOnly first. Apply requires typing EDIT SAFE. Name, budget, bids, and targeting-safe fields only. Status ENABLED / enable / unpause / go-live are refused.
  • Import copies a cached Google campaign into an Adrunr create-type draft. Dry-run preview is the default. Import never enables, unpauses, or applies live Ads — imported drafts stay on the PAUSED create path.
  • Performance reports are read-only. They roll up cached CampaignMetricSnapshot rows or a googleAds:search and never enable, unpause, mutate live Ads, or spend. Cached ENABLED is a snapshot only.
  • GA4 Connect is advertiser OAuth. Adrunr lists properties the connected user can access, binds one google_analytics ExternalAccount, and runs a read-only 7-day sessions report. Key events stay Coming soon. No spend.
  • Pause and Delete confirms require typing PAUSE CAMPAIGN or DELETE CAMPAIGN. Live mutate is gated (Coming soon — use Google Ads). Adrunr will not enable later. Re-enable only in Google Ads.

Providers

Multi-channel from day one.

Seeded registry rows, same shape as the ops console. Google Ads Connect is implemented. Clarity, Meta, TikTok, LinkedIn, Heartza, and Custom are schema-ready stubs.

Google Ads

Live

google_ads · ADS

OAuth connect implemented

Google Analytics (GA4)

Live

google_analytics · ANALYTICS

Connect, bind a property, sessions 7d

Microsoft Clarity

Ready

microsoft_clarity · HEATMAP

Schema-ready stub

Meta Ads

Ready

meta_ads · ADS

Schema-ready stub

TikTok Ads

Ready

tiktok_ads · ADS

Schema-ready stub

LinkedIn Ads

Ready

linkedin_ads · ADS

Schema-ready stub

Heartza

Ready

heartza · OTHER

Schema-ready stub

Custom / future

Ready

custom · OTHER

Schema-ready stub

Next step

Open the ops console.

Connect an authorized Google Ads account, list customers, and validate a paused Search campaign. Questions about access or onboarding go to red4code@gmail.com.