Africa’s Google Ads autopilot — built in Nairobi 🇰🇪.
Connect your account, answer 8 questions, click Launch.
We serve SMBs in every African country. The bot runs every day. You stay in control.
What is AdPilot
AdPilot is a Google Ads autopilot for small and medium businesses across every African country. We’re headquartered in Nairobi, Kenya 🇰🇪, and we serve SMBs from Lagos to Cape Town, Cairo to Casablanca, Accra to Dar es Salaam. You connect your Google Ads account once, answer 8 questions about your business, and the system does the rest:
- Generates a launch-ready campaign in 30 seconds.
- Runs a daily optimizer that pauses losers and boosts winners.
- Pulls Google's own AI recommendations and applies low-risk ones.
- Monitors your competitors weekly and rewrites your ads to beat them.
- Verifies your conversion tracking with a real headless browser.
- Watches your campaigns hourly for budget blowouts and pacing issues.
You stay in control. Every action is logged. You pick how aggressive the autopilot should be — Autopilot, Review, or Manual.
Your first 15 minutes
/app/conversions auto-pulls your Google Ads conversion IDs. Copy the head snippet + download gtag-tracking.js, paste into your website. Click "Verify installation" — we open a real headless browser and confirm the conversion ping fires. No more silent broken tags.
Dashboard /app
Your "is everything ok?" surface.
Campaigns /app/campaigns
The full list of every campaign in your connected account, with 7-day spend, clicks, CTR, CPC, conversions, and Lost-IS bars:
- Budget loss = your daily budget is too small (raise spend).
- Rank loss = your bid or Quality Score is too low (fix bid / ad copy / landing page).
Click a campaign to see 30-day KPIs, top keywords with Quality Score column, a spend-per-day chart, optimizer activity filtered to that campaign, and live Pause / Resume / Edit buttons (mutate Google Ads + audit-log).
The Edit button caps daily-budget changes at 5× your onboarding budget — safety guardrail against accidental zero-typos.
Search terms /app/search-terms
Real customer queries that triggered your ads in the last 30 days. Use it to:
- Spot junk searches — AI-classified intent buckets (buyer / research / competitor / junk). The optimizer auto-adds the obvious junk as negatives every night.
- Find buyer-intent terms you should promote to exact-match.
- Catch competitor brand searches and route them to a counter-positioning ad group.
Ad drafts /app/drafts
When the daily optimizer detects CTR has dropped below 4%, it generates a fresh Responsive Search Ad here. Each draft shows headlines + descriptions with character counts, the language, and the bot's reason. Approve & launch pushes the ad live in Google Ads (always paused on creation so you do a final visual review). Reject deletes the draft.
A/B variants: when the optimizer fires, it generates two copies with different angles (price-led vs trust-led) so Google's ad rotation can A/B test them in the same ad group.
Recommendations /app/recommendations
This is Google's own AI surfacing suggestions inside your account — "add these keywords", "fix conversion tracking", "raise budget", "switch to Smart Bidding". Pulled daily at 05:00 UTC.
| Risk | Examples | What happens |
|---|---|---|
| low | Negatives, missing extensions, match-type tightening | Auto-applies on Autopilot mode |
| medium | New keywords, ad copy, bidding strategy switch | Always asks for human approval |
| high | Budget changes ≥ 20%, big-impact moves | Always human-approved, even on Autopilot |
For each rec you can Apply (runs Google's recommended change live in your account) or Dismiss (Google won't surface it again). The page also shows what the bot has auto-applied for you in the last 30 days, so you always know what changed without your input.
Competitor intelligence /app/competitor-intel
The autopilot finds your competitors automatically — you don't have to type anything.
- Click Discover competitors once.
- AI reads your business description + service area, picks 3–5 likely real competitors.
- We crawl each landing page and extract structured intel: USPs, pricing, trust signals, schema markup, tracking pixels, niche angles, lead magnets.
- A separate AI synthesizes everything into a weekly playbook — at-a-glance comparison table, top plays to steal (with WHY + HOW), gaps to exploit, recommended keywords + copy hooks + lead magnets.
Refreshes every Monday. You can refresh on demand. If you'd rather seed the list yourself: open Manage tracked list below the playbook and add your own domains.
Bonus: the optimizer's ad-copy generator reads the playbook before generating new ads, so every fresh RSA actively counter-positions against your strongest competitors (e.g. "Free Friday delivery" when a competitor doesn't offer it).
Conversions /app/conversions
Without conversion tracking, no AI (ours or Google's) can optimize your campaigns. This is the single most impactful 5-minute task you can do today.
adpilot-head.html and paste between <head>…</head> on every page.
gtag-tracking.js on your server
Download the file. Save to /js/gtag-tracking.js and load via:
<script src="/js/gtag-tracking.js" defer></script>
OK, Wrong target, No ping, or Missing element.
Activity log /app/activity
Every action AdPilot takes is recorded with WHO, WHAT, WHEN, and WHY. Includes daily optimizer runs, auto-applied Google recommendations, manual approve/reject of ad drafts, account reconciliations, billing webhooks, automation-mode changes, and conversion-verifier runs.
Retention: 365 days. After that, rows are pruned by the retention cron at 04:30 UTC.
Settings /app/settings
- Plan & billing — pick Starter / Growth / Scale (PayPal popup, no redirect). 15-day free trial built in.
- Connected Google Ads accounts — set primary, sync, remove. Status shown per account: connected / limited / disconnected / suspended.
- Automation mode — drives the Google Recommendations cron. See the table below.
- Team — invite team members (Growth + Scale plans).
- AI usage today — current AI spend / daily cap.
- Export your data — GDPR / UAE PDPL JSON download (everything we hold about you, refresh tokens redacted).
- Delete my account — confirm with email, cancels Stripe sub, cascade-deletes all your data via Clerk webhook.
| Mode | What it does |
|---|---|
| Autopilot | Apply low-risk Google recs automatically. Medium and high still wait for your approval. |
| Review default | Pull recs daily, never auto-apply. One-click each from /app/recommendations. |
| Manual | Pull but never act. You drive everything by hand. |
Billing & trial /app/billing
- Every new signup gets 15 days free, no card upfront.
- Pick a plan: Starter ($49/mo), Growth ($149/mo), or Scale ($349/mo).
- Click Pay with PayPal — an inline popup opens. No full-page redirect.
- Approve in PayPal — popup closes — page refreshes with your active subscription.
- PayPal handles the trial → recurring transition automatically. First charge happens day 16.
- If trial expires without subscribing,
/app/*redirects to/app/billinguntil you pick a plan. Your data is preserved. - Cancel anytime from Settings (takes effect at the end of the current billing period).
Offline conversions API (recommended)
Smart Bidding optimizes 5–15× better when it learns from real deal revenue instead of form fills. Two endpoints to push real revenue back:
Enhanced Conversions for Leads
POST https://eqati.com/api/conversions/enhance
{
"api_key": "<your clerk user id>",
"conversion_action": "Form Submit",
"email": "...", "phone": "...", "gclid": "...",
"value": 1500, "currency": "AED",
"conversion_date_time": "2026-04-30T18:32:00+04:00"
}
Use from your CRM webhook, Make/Zapier, or any backend. We hash email/phone before storing — plaintext PII never touches our DB.
Offline Conversions
POST https://eqati.com/api/conversions/offline
{
"api_key": "<your clerk user id>",
"conversion_action": "Closed Deal",
"gclid": "Cj0KCQjw...",
"value": 8000, "currency": "AED"
}
Push the closed-deal value (and original gclid you captured at click) from your CRM. Smart Bidding then optimizes for closed revenue, not form fills.
What runs automatically
| When | What |
|---|---|
| Daily 02:00 UTC | Optimizer — pause loser keywords, boost winners, add negatives, raise budgets, queue ad-copy drafts |
| Daily 03:30 UTC | Insights — day×hour heatmap, geo heatmap, network negatives, cohort metrics, playbook snapshots |
| Daily 04:30 UTC | Retention — prune audit log > 365d, webhook events > 30d, AI spend > 730d |
| Daily 05:00 UTC | Google Recommendations — pull Google's own AI recs, classify, auto-apply low-risk for autopilot users |
| Weekly Mon 02:00 UTC | Competitor intel — re-crawl every tracked competitor, refresh the playbook |
| Weekly Mon 03:00 UTC | Weekly digest — email summary of last week's perf + top wins + top objections |
What never runs without your approval
- Never raises your daily budget more than 5× your onboarding number.
- Never pauses an entire campaign (only individual losing keywords).
- Never auto-applies a Google rec classified medium or high risk.
- Never sends ad copy live without your Approve click on
/app/drafts. - Never charges you anything during your 15-day trial.
- Never shares your data with other customers — cohort benchmarks are k-anonymous (cohorts < 5 accounts are skipped).
Troubleshooting
gtag-tracking.js are both installed. Run the verifier on your homepage URL specifically.
/app/billing. Until you do, /app/* redirects there. Your data is preserved.
Support
| support@eqati.com | |
| Billing | billing@eqati.com |
| Bug reports | Include the run-id from the bottom of any failed page (e.g. guards_molxewhf) so we can pull the trace. |
| Status | eqati.com/api/health — JSON of database / Google OAuth / OpenAI status. |
Principles
- Real data only. If we can't read your account, we say "no live data" — never seeded numbers.
- Every action audited. Every change the bot makes is logged with who, what, when, why.
- You can always override. Autopilot doesn't lock you out — every rule has a human-approval path one click away.
- Cheap by design. Daily AI spend cap defaults to $5; verify exactly what AI cost you in
/app/settings. - Privacy first. Competitor data is hashed-cohort, conversions are server-side hashed before send, refresh tokens are redacted from data exports.