Google Ads Scheduled Feeds
This guide shows how to connect Konektor to Google Ads Scheduled Uploads so Google Ads automatically pulls your lead data as:
- Offline Conversions — to optimize bidding based on real-world conversions (chat → deal).
- Customer Match — to target/exclude audiences, build lookalikes, or run remarketing.
How it works: Konektor exposes two CSV URLs per workspace. Google Ads fetches them on a schedule (Daily / Weekly / Monthly) using HTTP Basic Auth. All PII (email, phone, name) is SHA-256 hashed before transit, per Google's official spec.
Architecture
[Konektor DB] ──▶ /v1/google/feeds/{code}/offline-conversions.csv ──▶ Google Ads (Scheduled)
──▶ /v1/google/feeds/{code}/customer-match.csv ──▶ Google Ads (Scheduled)
▲
│
HTTP Basic Auth
(Username + Password you generate)
- Protocol: HTTPS (required).
- Auth: HTTP Basic Auth (Google Ads standard).
- Format: CSV per Google's official spec (see below).
- Content: Generated on-demand when Google fetches — always fresh.
Prerequisites
- Workspace already has a Tracking Code (auto-created at signup).
- An active Google Ads account with Admin / Standard access.
- (For offline conversions) Conversion Actions already created in Google Ads with matching names.
Step 1 — Generate Credentials in Konektor
- Sign in to Konektor → select the workspace to connect.
- Go to Google Ads Feeds (in the Owner sidebar).
- Click "Generate Credentials".
- Copy the password displayed right now — it's shown only once. Save to your password manager.
- Also copy the Username and both feed URLs (offline & customer match).
Step 2 — Set Up Offline Conversions
2a. Create Conversion Actions in Google Ads
- Google Ads → Tools & Settings → Conversions → New conversion action.
- Pick Import → Other data sources or CRMs → Track conversions from clicks.
- Set Name to match your Konektor lead statuses (default:
new,qualified,won, etc.) — or use name-map in feed settings. - Repeat for every status you want to import.
2b. Create the Schedule
- Google Ads → Tools & Settings → Conversions → Uploads → Schedules.
- Click + → HTTPS.
- Paste the offline conversions URL from Konektor:
https://konektor.id/v1/google/feeds/WS-XXXXXX/offline-conversions.csv - Enter the Username and Password from Konektor.
- Pick a frequency:
- Daily (recommended) — enough for most cases.
- Weekly / Monthly — for low-volume workspaces.
- Click Save.
- Click "Upload preview" — Google Ads will immediately test-fetch your file.
2c. CSV Output Example
Parameters:TimeZone=+0700
Email,Phone Number,Conversion Name,Conversion Time,Conversion Value,Conversion Currency
a3f1b2c...,e5d8f7a...,qualified,2026-04-21 10:30:00,100000,IDR
d92fe8b...,c7b3a14...,won,2026-04-20 15:22:11,2500000,IDR
- Parameters:TimeZone — Required. Default
+0700(Jakarta). Change in settings if elsewhere. - Email / Phone Number — SHA-256 hashed. Email lowercased & trimmed, phone normalized to E.164 (
+62…). - Conversion Name — lead status (or custom mapping).
- Conversion Time —
yyyy-MM-dd HH:mm:ssin the declared time zone. - Conversion Value —
actualValue??estimatedValue??0. - Conversion Currency — ISO-4217 (default
IDR).
Step 3 — Set Up Customer Match
3a. Create Customer List in Google Ads
- Google Ads → Tools & Settings → Audience manager → Customer lists.
- + → Upload data source: Scheduled (via HTTPS).
- Paste the customer match URL from Konektor:
https://konektor.id/v1/google/feeds/WS-XXXXXX/customer-match.csv - Enter Username and Password.
- Pick a frequency (Daily / Weekly / Monthly).
- Check the consent confirmation checkbox for customer-data use per Google's policy.
3b. CSV Output Example
Email,Phone,First Name,Last Name,Country,Zip
a3f1b2c...,e5d8f7a...,f4a2b1e...,8c3d7b2...,ID,
d92fe8b...,c7b3a14...,a1b2c3d...,,ID,
- All PII SHA-256 hashed (lowercase hex).
- Country — ISO-2 code (default
ID), not hashed. - Zip — optional, not hashed.
- Requires Email OR Phone at minimum. Leads without either are skipped.
Advanced Settings
Status Filter
By default the offline feed sends all statuses. Pick specific ones if you want Google Ads to import only key milestones (e.g. qualified, won).
Custom Name Map
If you want conversion names in Google Ads to differ from Konektor statuses:
| Konektor Status | Name in Google Ads |
|---|---|
qualified | Qualified Lead |
won | Paid Conversion |
Configure via the UI or PATCH the API directly:
{
"offlineNameMap": {
"qualified": "Qualified Lead",
"won": "Paid Conversion"
}
}
Rolling Window
Default offline feed window = last 90 days (by updatedAt). This keeps the payload light and follows Google's guidance (don't re-send ancient conversions). Configurable via the windowDays slider (1–540).
updatedAt, so a slow deal can move a very old click back into range. Konektor skips those rows for you, so the CSV never carries a row that Google will reject.A lead with a sales cycle longer than 90 days cannot be imported as an offline conversion. Use Customer Match for that audience instead.Timezone
Default +0700 (Jakarta). Change if your workspace is in a different zone. Format: +HHMM or -HHMM.
Security Practices
- ✅ Passwords hashed with PBKDF2-SHA-256, 100k iterations.
- ✅ Verification uses timing-safe compare.
- ✅ Rate limited at 60 req/min per IP (plenty for Google's daily polling).
- ✅ HTTPS-only (Cloudflare TLS).
- ✅ 404 (not 401) for unknown workspace codes → no enumeration.
- ✅
Cache-Control: private, no-store→ feed is never cached by public CDNs. - ✅ Audit trail: last fetch timestamp + row count stored per feed.
Troubleshooting
"401 Unauthorized" in the Google Ads preview
- Check Username & Password. Forgot? Click "Rotate Password" in Konektor.
- No leading/trailing whitespace when pasting.
"404 Not Found"
- Verify the workspace code in the URL (format
WS-XXXXXX). - Ensure the relevant feed (
offlineEnabled/customerMatchEnabled) is on.
"Low match rate" on Customer Match
- Make sure email & phone on leads are real (not dummy values).
- Phone must normalize to E.164 — Indonesian
08xxis auto-converted to+628xx.
"Conversion name not found" in Google Ads
- The
Conversion Namefield must exactly match the Conversion Action name in Google Ads (case-sensitive). - Review your
offlineNameMapin Konektor.
"Identifiers or iOS URL parameters are too old" / status "Needs attention"
This message is not about iOS. It tells you that the ad click behind the imported event is older than the click-through conversion window of that conversion action.
- Open Tools → Conversions, select the conversion action, then set the click-through conversion window to 90 days (the maximum).
- Rows whose click already passed 90 days stay out of the CSV. Google cannot accept them at all.
- Keep the schedule Daily, so each deal reaches Google before its click ages out.
- The status flags the rejected rows only. Conversions that Google already recorded stay valid.
Delay
Google Ads recommends waiting 6 hours after a scheduled upload before data appears in conversion reports.
Next steps
- GA4 to Google Ads: Conversion Sync Step-by-Step (UI 2026)
- Conversion Settings Configuration - Ad Optimization
- Google Enhanced Conversions
Official Google References
Need More Help?
Our team is ready to help you maximize ad tracking and business attribution.
Try or continue
© 2026 Konektor. All rights reserved.
