GEO walkthrough · 30-day preview

GEO onboarding — Day 0 to Day 30.

What actually happens after you sign GEO Pro / Scale / Enterprise. Step-by-step, with sample artifacts pulled from the live pipeline.

← Back to all walkthroughs
VIDEO · COMING SOON 3-minute screencast of the full GEO onboarding flow. Recorded once first GEO subscriber lands; until then, the full text walkthrough below covers the same flow.

Day 0 — Stripe checkout

DAY 0 · STRIPE PAYMENT

You complete checkout via the Stripe-hosted page

From the GEO lane page you click "Start with GEO Pro — $1,999/mo" (or Scale / Enterprise). Stripe's hosted checkout collects payment method + billing email. You don't enter any GEO-specific config here — that comes later via the intake form.

On successful payment, Stripe fires a checkout.session.completed webhook. The garnetgrid-fulfillment Cloudflare Worker receives it, creates a customer envelope in R2 at garnet-tokens/geo/<slug>.json, and sends a welcome email via Postal (sovereign mail with DKIM).

Total elapsed time: ~5 seconds from "Pay" click to welcome email in your inbox.

DAY 0 · WELCOME EMAIL

You receive a welcome email with your dashboard link

Sample email body
Subject: Welcome to GEO Pro — your dashboard is ready Hi [your name], Your GEO Pro subscription is active. Citation polling starts within 24 hours of you completing the intake form below. Your dashboard: https://www.garnetgrid.com/account/geo/[16-char-slug] Next step (3 minutes): Complete the intake form to author your tracked-query set: https://www.garnetgrid.com/account/geo/[16-char-slug]/onboard What happens next: · Day 1 — first daily polling run completes · Day 7 — first weekly schema PR pack arrives · Day 30 — first monthly executive PDF lands in your inbox Reply to this email with anything — engineer-replied within 1 business day. — Jakub Rezayev, Garnet Grid Consulting

Day 1 — Intake form

DAY 1 · ONBOARDING INTAKE

You complete the GEO intake form

The intake form lives at /account/geo/<slug>/onboard and takes 3–5 minutes. Five sections:

  1. Priority queries (required) — 5 to 100 buyer-intent queries to track across the four-model panel. The citation operator authors these with you on the intake call if you'd rather, or you can submit them yourself.
  2. Domain + brand — primary hostname to track citations for (auto-derived from billing email if blank), plus optional competitor domains (up to 20) for the competitive matrix.
  3. GitHub repo — repo URL + deploy key for the schema PR pipeline. Optional: if you don't grant repo access, schema lands as markdown patches instead of merged PRs.
  4. Drift alert routing — Discord channel ID for citation-drift alerts (numeric, copy-from-channel). Defaults to your billing email.
  5. Notes for the operator — free text up to 2000 chars: embargoed product launches, brand-voice constraints, regions to weight, etc.

After submit you land back on the dashboard with a green "Onboarding submitted ✓" banner. The citation operator gets a Discord ping and reviews intake within 4 business hours.

DAY 1 · INFRASTRUCTURE PROVISIONING

Garnet provisions your tenant resources

On the operator side: a 30-minute setup brings up your tenant infrastructure in your Cloudflare account.

  • R2 bucket pair (garnet-snapshots, garnet-reports) is confirmed bound to the geo-monthly Worker.
  • The geo-monthly-delivery Workflow is registered with your envelope's slug.
  • Daily snapshot writer Worker is configured with your tracked-query set.
  • Discord channel pair (#geo-drift + #geo-monthly) is bootstrapped if you provided a workspace; otherwise email-only routing.

Day 2 — First polling run

DAY 2 · FIRST DAILY SNAPSHOT

Citation polling starts

The daily snapshot writer fires at 03:00 UTC. For each (model × query) pair in your tracked set, it captures the model's response, parses citation events, and writes a structured JSON snapshot to your R2 at garnet-snapshots/geo/<slug>/<YYYY-MM-DD>/<model>.json.

Sample snapshot record
{ "date": "2026-05-10", "model": "chatgpt", "queries_polled": 47, "citations_observed": 9, "citations_by_position": { "top1": 3, "top3": 5, "top5": 7, "mentioned": 9 }, "context_classification": { "flattering": 6, "neutral": 2, "comparative": 1, "negative": 0 }, "top_competitors": [ { "domain": "competitor-a.com", "count": 11 }, { "domain": "competitor-b.com", "count": 8 } ], "queries_with_citation": ["best vector database for serverless", "..."] }

The dashboard's "Latest citation snapshot" card updates by Day 3 with the first diff against your baseline.

Day 7 — First weekly drop

DAY 7 · SCHEMA PR PACK

First schema PR pack ships

The citation operator reviews the first 7 days of citation data, identifies the gaps (which queries the model couldn't find authoritative signals for), and ships the first schema PR pack. If you granted GitHub repo access, this is a literal pull request labeled garnet-geo.

Sample PR description
title: feat(schema): GEO PR pack #1 — Organization knowsAbout + 3x Service blocks This PR adds JSON-LD structured data targeting the gaps in week-1 citation telemetry: - Organization with knowsAbout[] covering 8 topical entities your category should be cited for (data from monitor: 0/12 ChatGPT responses cited your brand on these queries) - 3x Service blocks (Pro / Scale / Enterprise tiers) with full Offer + UnitPriceSpecification (Perplexity gap: ranks competitors with comparable schema higher) - llms.txt v1 at /llms.txt — curated index of canonical authority pages for the four-model panel to consume directly Gap report row references in code comments, e.g.: // Gap report 2026-05-15 row 7 — ChatGPT cited competitor-a 4/4 // for "best X for Y" because their Service schema has UnitPriceSpec // and yours doesn't. This PR closes that gap. Author: Garnet citation operator (engineer-led, not slide-deck) Expected citation lift: 21-35 days (next retrieval index pass)

Subsequent weekly drops (PR pack #2, #3, #4) target the next-tier gaps and ship every Friday. By week 4 the schema-PR pattern is established and your repo's JSON-LD coverage typically expands 40–80% over the baseline.

Day 14 — Drift alert (sample)

DAY 14 · CITATION DRIFT

Discord alert fires when citation share drops

Sentinel-aaS routes citation-drift alerts within 15 minutes of detection. A drift event = your citation share drops below the configured threshold for a tracked query family between two consecutive daily snapshots.

Sample Discord alert
🔻 GEO drift alert · 2026-05-23 14:22 UTC Brand: yourbrand.com Model: Perplexity (Sonar) Query family: "best vector database for serverless" Yesterday: cited 3/3 (top-1: 1, top-3: 2) Today: cited 1/3 (top-1: 0, top-3: 1) Likely cause: schema cache miss on /products/vector-db.html (deploy 2026-05-23 12:50 UTC modified the URL — old citation graph still pointing at the prior path). Garnet engineer paged. Investigating.

Day 30 — First executive PDF

DAY 30 · MONTHLY DELIVERY

Cloudflare Workflow renders + emails the first executive PDF

On the 1st of the next month, the geo-monthly-delivery Workflow fires for your slug. It runs the 14-step durable pipeline (load envelope → verify Stripe active → load query set → poll engines → diff vs baseline → schema audit → citation ops log → competitor summary → generate PDF → store to R2 → build email → send → notify Discord → update envelope), and the resulting PDF lands at garnet-reports/geo/<slug>/<YYYY-MM>.pdf.

You get the email with the PDF attached + the dashboard URL. The PDF covers:

  • Citation-share trend (your share of voice across the 4-model panel, 30/60/90-day windows)
  • Position distribution (% of citations in top-1, top-3, top-5, mentioned)
  • Competitive matrix (which brands gained/lost share against you)
  • Top 10 query gaps with cause-analysis (missing signal type vs. authority deficit)
  • Schema PRs shipped (repo, PR number, 1-line summary, merged Y/N)
  • Quarter-trend forecast based on signal velocity
  • 3–5 prioritized next-cycle recommendations

From here, the cadence is steady-state: daily polling, weekly schema PR drops, monthly executive PDF. The same engineer ships every cycle. Tier escalation decisions typically come at the 90-day quarter-end review.

What you DON'T see in this walkthrough

The omissions are intentional:

See GEO pricing →   Read the methodology →   Compare vs alternatives →