English | Français | Español | 中文 | Nederlands | Русский | 한국어
Geautomatiseerde AI-blogpipeline die Google Ads- en PPC-vragen van Reddit ontdekt, expertartikelen genereert met Claude, en deployt naar Cloudflare Pages — twee keer per dag, volledig onbeheerd.
Deze engine draait op een Cloudflare Worker, twee keer per dag getriggerd door cron. Elke run:
- Ontdekt trending PPC-vragen van Reddit via SearchAPI (SERP-gebaseerd, geen Reddit API nodig)
- Filtert op kwaliteit — minimale engagement, blokkeerlijst, NSFW-uitsluiting, duplicaatdetectie
- Ontdubbelt met Vectorize semantische gelijkenis om te voorkomen dat hetzelfde onderwerp twee keer wordt gepubliceerd
- Genereert een volledig expertartikel van 1.500-3.000 woorden met Claude (Anthropic)
- Valideert de HTML — JSON-LD-schema's, GTM, metatags, AI-vermelding, Reddit-bronvermelding
- Publiceert via GitHub API-commit, wat een Cloudflare Pages-deploy triggert
- Verifieert dat de live URL een 200-status retourneert voordat het als gepubliceerd wordt gemarkeerd
- Notificeert via e-mail + SMS (AT&T-gateway, geen Twilio nodig)
- Pingt IndexNow om het artikel binnen enkele uren te indexeren
Elk gegenereerd artikel bevat volledige SEO-gestructureerde data (BlogPosting, QAPage, BreadcrumbList), E-E-A-T-auteurssignalen, AI-vermelding en een link naar de Reddit-brondiscussie.
Dit project bestaat dankzij de geweldige PPC-gemeenschappen op Reddit, LinkedIn, Quora en daarbuiten. Elk artikel dat door deze engine wordt gegenereerd, crediteert de brondiscussie en linkt terug naar de originele thread.
| Subreddit | Focus | Link |
|---|---|---|
| r/PPC | Pay-per-click-advertenties, Google Ads, Meta Ads | reddit.com/r/PPC |
| r/googleads | Google Ads-specifieke vragen en strategieën | reddit.com/r/googleads |
| r/digital_marketing | Breed digitale marketing inclusief betaalde media | reddit.com/r/digital_marketing |
| r/adwords | Historische Google AdWords-community (nog steeds actief) | reddit.com/r/adwords |
| r/marketing | Algemene marketingstrategie en sectordiscussie | reddit.com/r/marketing |
| r/SEO | Zoekmachineoptimalisatie (cross-channel context) | reddit.com/r/SEO |
| r/DigitalMarketing | Digitale strategie, analytics, betaalde media | reddit.com/r/DigitalMarketing |
| r/FacebookAds | Meta/Facebook-advertenties | reddit.com/r/FacebookAds |
| r/AmazonSeller | Amazon PPC en marketplace-advertenties | reddit.com/r/AmazonSeller |
- Moet ik breed of exact matchen gebruiken? — Het eeuwige match-type-debat
- Hoeveel moet ik uitgeven aan Google Ads voor een klein bedrijf? — Budgetbepalingsvragen
- Performance Max vs zoekadvertentiecampagnes — Campagnetype-selectie
- Mijn CPC blijft stijgen, wat moet ik doen? — Kostenoptimalisatie
- Is Google Ads het waard voor een nieuw bedrijf? — ROI-rechtvaardiging
- Smart Bidding werkt niet voor mij — Biedstrategie-probleemoplossing
- Hoe structureer je een Google Ads-account? — Accountorganisatie
- Google Ads Community op LinkedIn — Actieve professionele groep
- PPC Chat Community — Wekelijkse Twitter/X-chatcommunity
- Digital Marketing Professionals — Brede digitale marketinggroep
- Paid Search Association — Brancheorganisatie
- Google Ads Help Community — Officieel Google-forum
- Google Ads (Quora) — Vragen en antwoorden over Google Ads-strategie
- PPC Advertising (Quora) — Pay-per-click-discussies
- Digital Marketing (Quora) — Brede marketing Q&A
- SEM (Quora) — Zoekmachinemarketing
| Project | Beschrijving | Link |
|---|---|---|
| Google Ads MCP | Python MCP-server met 29 tools voor de Google Ads API | github.com/itallstartedwithaidea/google-ads-mcp |
| Google Ads Gemini Extension | Gemini CLI-extensie met 22 tools | github.com/itallstartedwithaidea/google-ads-gemini-extension |
| Google Ads Skills | Anthropic Claude Agent Skills voor Google Ads | github.com/itallstartedwithaidea/google-ads-skills |
| Google Ads API Agent | Volledige Python-agent met 28 acties | github.com/itallstartedwithaidea/google-ads-api-agent |
| GoogleAdsAgent.ai | De volledige website en tools | github.com/itallstartedwithaidea/googleadsagent-site |
┌─────────────────┐
│ Cron Scheduler │
│ 7am + 7pm ET │
└────────┬────────┘
│
▼
┌─────────────────────────────────────────────────────────────────────┐
│ Blog Engine Worker │
│ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────────────┐│
│ │ Discover │──▶│ Filter │──▶│ Generate │──▶│ Validate ││
│ │ (SERP) │ │ & Dedupe │ │ (Claude) │ │ (schema, links) ││
│ └──────────┘ └──────────┘ └──────────┘ └────────┬─────────┘│
│ │ │ │ │ │
│ ▼ ▼ ▼ ▼ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────────────┐│
│ │SearchAPI │ │Vectorize │ │ Claude │ │ GitHub API ││
│ │ │ │ D1 (DB) │ │ API │ │ Commit + Push ││
│ └──────────┘ └──────────┘ └──────────┘ └────────┬─────────┘│
│ │ │
└─────────────────────────────────────────────────────────┼──────────┘
│
┌───────────────────────────────┼──────────┐
│ ▼ │
│ ┌──────────┐ ┌──────────────────────┐ │
│ │ Verify │──▶│ Notify (Email + SMS) │ │
│ │ (200 OK) │ │ IndexNow Ping │ │
│ └──────────┘ └──────────────────────┘ │
│ Cloudflare Pages Deploy │
└──────────────────────────────────────────┘
Elk artikel doorloopt deze statussen:
discovered → queued → generating → draft_ready → published
│ │
▼ ▼
skipped failed
(filtered out) (retryable error)
| Service | Doel |
|---|---|
| Workers | Blog engine runtime (cron-getriggerd) |
| D1 | Artikeltrackingdatabase (SQLite) — status, budgetten, runlogs |
| KV | Blogmanifest voor dynamische indexpagina |
| R2 | Hero-afbeeldingopslag |
| Workers AI | Embeddings (bge-base-en-v1.5) + afbeeldingsgeneratie (Stable Diffusion XL) |
| Vectorize | Semantische ontdubbelingsindex (cosinus-gelijkenis op blog-topics) |
| Pages | Statische sitehosting + Functions |
- Node.js 20+
- Wrangler CLI (
npm install -g wrangler) - Cloudflare-account met betaald Workers-plan
- Anthropic API-sleutel
- SearchAPI-sleutel
- GitHub personal access token (repo-scope)
- Google OAuth via Buddy (voor e-mail/SMS-notificaties — gebruikt Gmail API, geen extra service)
git clone https://github.com/itallstartedwithaidea/reddit.git
cd reddit
npm install# Create D1 database
wrangler d1 create blog-tracker
# Copy the database_id into wrangler.toml
# Create KV namespace
wrangler kv namespace create BLOG_DATA
# Copy the id into wrangler.toml
# Create R2 bucket
wrangler r2 bucket create blog-assets
# Create Vectorize index
wrangler vectorize create blog-topics --dimensions=768 --metric=cosineWerk de binding-ID's bij in wrangler.toml met de waarden uit Stap 2:
[[d1_databases]]
binding = "DB"
database_name = "blog-tracker"
database_id = "YOUR_D1_ID_HERE"
[[kv_namespaces]]
binding = "BLOG_DATA"
id = "YOUR_KV_ID_HERE"wrangler secret put ANTHROPIC_API_KEY
# Paste your Anthropic API key
wrangler secret put SEARCHAPI_KEY
# Paste your SearchAPI key
wrangler secret put GITHUB_TOKEN
# Paste your GitHub personal access token
# Notifications use Gmail API via the admin's Google OAuth session
# No additional API keys needed for email/SMS
wrangler secret put EMAIL_TO
# Enter: your@email.com
wrangler secret put SMS_GATEWAY_TO
# Enter: your 10-digit phone number (e.g. 5551234567)
# SMS is sent via AT&T gateway: number@txt.att.net
# For other carriers:
# T-Mobile: number@tmomail.net
# Verizon: number@vtext.com
# Sprint: number@messaging.sprintpcs.com
wrangler secret put CRON_SECRET
# Enter a random secret string for authwrangler d1 execute blog-tracker --file=./schema.sqlwrangler deploycurl -X POST "https://your-worker.workers.dev/run?key=YOUR_CRON_SECRET&dry_run=true"curl -X POST "https://your-worker.workers.dev/run?key=YOUR_CRON_SECRET"reddit/
├── src/
│ ├── index.ts # Worker-entrypoint — cron-handler, HTTP-routes, pipeline-orkestratie
│ ├── types.ts # TypeScript-interfaces voor alle datatypen
│ ├── db.ts # D1-databasebewerkingen — artikelen, budget, runlogs
│ ├── ingest.ts # Reddit-threadontdekking via SearchAPI SERP
│ ├── gates.ts # Kwaliteitsfilters, blokkeerlijst, Vectorize semantische ontdubbeling
│ ├── topics.ts # Onderwerpclassificatie in 12 PPC-clusters
│ ├── generate.ts # Claude-artikelgeneratie + gerelateerde artikelkoppelingen
│ ├── template.ts # Volledig HTML-template (overeenkomend met googleadsagent.ai-ontwerp)
│ ├── images.ts # Workers AI hero-afbeeldingsgeneratie (Stable Diffusion XL)
│ ├── validate.ts # Post-generatievalidatie (10+ controles)
│ ├── publish.ts # GitHub API-commit + deployverificatie
│ ├── notify.ts # E-mail + SMS-notificaties + IndexNow
│ └── budget.ts # Kostentracking, dagelijkse/maandelijkse limieten
├── schema.sql # D1-databaseschema
├── wrangler.toml # Cloudflare Worker-configuratie
├── package.json
├── tsconfig.json
└── README.md
| Variabele | Standaard | Beschrijving |
|---|---|---|
MAX_POSTS_PER_RUN |
2 |
Maximum artikelen per cron-run |
MAX_DAILY_GENERATIONS |
4 |
Maximum artikelen per dag (2 runs x 2 artikelen) |
MAX_MONTHLY_USD |
50 |
Maandelijks budgetlimiet (Claude + SearchAPI-kosten) |
SITE_URL |
https://googleadsagent.ai |
Basis-URL van je site |
GITHUB_REPO |
itallstartedwithaidea/googleadsagent-site |
GitHub-repo voor git-commits |
GITHUB_BRANCH |
main |
Branch om naar te committen |
Elk artikel wordt geclassificeerd in een van de 12 PPC-onderwerpsclusters:
| Cluster | Zoekwoorden |
|---|---|
| Bieden | bid, tCPA, tROAS, smart bidding, handmatige CPC |
| Creatief | RSA, koppen, advertentietekst, extensies, sitelinks |
| Doelgroepen | targeting, remarketing, aangepaste segmenten, breed matchen |
| Meting | conversietracking, GA4, attributie, verbeterde conversies |
| Automatisering | scripts, regels, API, AI Max, optimalisatiescore |
| Beleid | afgekeurd, geschorst, handelsmerk, beroep |
| Shopping | shopping, merchant center, PMax, productfeed |
| Video | YouTube, demand gen, bumper, TrueView |
| Lokaal | lokale campagnes, GMB, locatie-extensies |
| Budget | CPC, CPA, ROAS, dagbudget, pacing |
| Accountstructuur | advertentiegroepen, naamgevingsconventies, SKAG, Hagakure |
| Algemeen | Vangnet voor brede strategievragen |
Elk artikel wordt gegenereerd door Claude met een systeemprompt die:
- De stem instelt als John Williams, Senior Paid Media Specialist ($350M+ beheerd)
- De Reddit-threadcontext biedt (titel, subreddit, fragment)
- 1.500-3.000 woorden substantiële, actiegerichte inhoud vereist
- Callout-boxen, vergelijkingstabellen, statistiekkaarten verplicht stelt
- Specifieke benchmarks en echte campagnedataranges vereist
- Verzonnen Redditor-citaten verbiedt
- Een "Conclusie"-sectie met genummerde actiepunten verplicht stelt
Elk artikel bevat:
- 3 JSON-LD-blokken:
BlogPosting(met volledige auteursentiteit + sameAs),BreadcrumbList,QAPage - Volledige metatags: og:, twitter:, canonical, robots
- GTM-tracking: GTM-NR7F6P92
- AI-vermelding: Zichtbaar blok dat Reddit-bron + AI-assistentie crediteert
- Auteurs-E-E-A-T-signalen: Person-schema met naam, jobTitle, sameAs-links
- Responsive ontwerp: Donker thema dat overeenkomt met googleadsagent.ai
Vóór publicatie wordt elk artikel gevalideerd op:
- Woordenaantal binnen grenzen (800-5.000)
- GTM-snippet aanwezig
- BlogPosting JSON-LD aanwezig en geldig JSON
- BreadcrumbList JSON-LD aanwezig
- QAPage JSON-LD aanwezig
- Reddit-bron-URL in de artikeltekst
- AI-vermeldingsblok aanwezig
- Canonical URL zonder
.html-suffix - og:image en twitter:image tags aanwezig
- Auteursnaam aanwezig
- Gedeelde scripts (sitezoeken, cookietoestemming, chatwidget)
From: blog-engine@googleadsagent.ai
To: your@email.com
Subject: New post live: {title}
Body: {title}\n{live URL}
To: 5551234567@txt.att.net
Body: New post: {title} {url}
- 80% maandbudget: E-mail + SMS-waarschuwing
- 100% maandbudget: E-mail + SMS, pipeline pauzeert tot volgende maand
- Pipeline-fouten: Alleen e-mail (geen SMS om je niet wakker te maken)
| Risico | Bescherming |
|---|---|
| Dubbele artikelen | D1 unieke constraint op reddit_id + Vectorize cosinus-gelijkenis (drempel 0,85) |
| 404 na publicatie | 5-keer verificatie (GET met cache-bypass, controleert 200 + inhoud > 1KB) |
| Ongecontroleerde kosten | MAX_POSTS_PER_RUN, MAX_DAILY_GENERATIONS, MAX_MONTHLY_USD — alles faalt veilig |
| Vastgelopen "generating"-status | Auto-reset van artikelen die > 2 uur in "generating" staan bij de volgende run |
| Giftige inhoud | Blokkeerlijst + minimale kwaliteitsdrempels |
| Reddit TOS | Alleen-lezen SERP-ontdekking (geen Reddit API-aanroepen), bronvermelding in elk artikel |
| Ongeldige HTML | 10+ validatiecontroles vóór elke publicatiepoging |
| API-storingen | Exponentiële backoff, begrensde retries, nette foutlogging |
Deze artikelen zijn gegenereerd door deze engine en zijn live op googleadsagent.ai:
- Should I Use Broad Match or Exact Match in Google Ads in 2026?
- How Much Should I Spend on Google Ads? The Small Business Reality Check
- Performance Max vs Search Campaigns: When to Use Which
- Reddit: Deze engine gebruikt SearchAPI (Google SERP) voor threadontdekking — het roept NIET rechtstreeks de Reddit API aan. Alle artikelen linken terug naar de bronthread en schrijven inhoud toe aan de communitydiscussie. Geen Reddit-gebruikersinhoud wordt letterlijk gekopieerd.
- AI-vermelding: Elk artikel bevat een zichtbaar AI-vermeldingsblok. Geen inhoud wordt gepresenteerd als uitsluitend door mensen geschreven.
- Auteursrecht: Artikelen zijn originele AI-gegenereerde analyses geïnspireerd door communityvragen. Ze reproduceren geen Reddit-posts of -reacties.
- Privacy: Geen Reddit-gebruikersnamen, IP-adressen of persoonsgegevens worden opgeslagen. Alleen thread-ID's en URL's worden bijgehouden.
John Williams — Senior Paid Media Specialist, $350M+ beheerd
MIT-licentie — zie LICENSE voor details.