SEO

Trace organic search to revenue and pipeline

Find which keywords and pages bring in paying customers: follow organic search all the way to purchases in GA4 or contacts and closed deals in HubSpot, so SEO is measured in revenue and pipeline instead of clicks.

The playbook

This is the question a dedicated SEO tool cannot answer, because the answer lives in three systems: what people searched for (Search Console), what they did on the site (GA4), and what they paid or became (HubSpot, Stripe). Joining them is what makes an SEO number a business number.

Steps

  1. Pick the revenue path. Self-serve or ecommerce: revenue is in GA4 (path A). Sales-led B2B: pipeline is in HubSpot (path B). Both can be true; run both and keep them separate. Ask which applies if it is not obvious.

  2. Pull the organic side. google_search_console.query with dimensions: ["page"] over 90 days ending 3 days ago, rowLimit: 500, and again with dimensions: ["query", "page"], rowLimit: 5000. Ninety days, because the path from search to money is longer than the path from search to click.

  3. Path A: revenue in GA4. google_analytics.run_report with dimensions: ["landingPage"], metrics: ["sessions", "conversions", "totalRevenue", "ecommercePurchases"], the same dates, dimensionFilter on sessionMedium EXACT organic. Join to Search Console on the normalised path. Compute revenue per organic click per page.

  4. Path B: pipeline in HubSpot. First hubspot.list_properties for contacts and for deals to find the analytics source and first-page fields. They are usually hs_analytics_source, hs_analytics_first_url and hs_analytics_source_data_1, but accounts differ; do not hardcode. Then:

    • hubspot.search_contacts with a filterGroups entry for the source property EQ ORGANIC_SEARCH and createdate within the window, requesting properties for email, create date and first URL. Group contacts by the path of their first URL and join to Search Console pages. This gives leads per organic page.
    • hubspot.list_pipelines for deals to learn which stage ids mean closed won. Then hubspot.search_deals filtered to the organic source and closed won within the window, requesting amount, close date and the first-URL property if deals carry one. This gives revenue from organic at the account level even when deal-to-page attribution is missing. Page through with after until exhausted; a partial pull silently understates everything.
  5. Stripe, only if attribution was captured. Stripe has no idea where a customer came from unless the checkout stored it. Ask whether UTM or referrer values are written to customer or subscription metadata. If they are, stripe.search with a metadata query on the organic value gives revenue directly; if not, skip this step and say so rather than guessing.

  6. Attribute queries. For the top revenue pages, take their query rows from step 2 and report the queries as the demand behind the revenue. This is query-to-page-to-revenue, not query-to-revenue; keep that distinction in the write-up.

  7. Report. Top ten organic pages by revenue or pipeline: page, clicks, sessions, conversions or contacts, revenue or closed-won amount, revenue per click, and the top three queries behind it. Then the share of total revenue or pipeline that organic accounts for, pages with real traffic and no revenue, and the one or two queries most worth defending. Keep GA4 revenue and HubSpot revenue in separate columns; never add them.

Gotchas

  • Different systems attribute differently. HubSpot's source is first touch by its own tracking cookie; GA4's is session-scoped and defaults to last non-direct click. Present each as what it is. Adding them double counts.
  • GA4 revenue requires ecommerce events. If totalRevenue is zero everywhere, the site is not sending purchase events; that is a tracking gap, not zero revenue.
  • HubSpot's ORGANIC_SEARCH is HubSpot's classification, based on referrer, not on Search Console. It includes all search engines and misses visitors whose referrer was stripped.
  • Sales cycles outlast the window. A deal closed this quarter came from a search last quarter. Use the contact's create date for lead attribution and the close date for revenue, and say the windows differ.
  • Stripe amounts are in minor units (cents). Divide by 100 once, and report per currency.
  • Join on the path. Strip origin, query string and trailing slash from Search Console, GA4 and HubSpot URLs before joining, and report the unmatched share.

Sequel CLI

Install Sequel skills into your agent

One command connects your agent to Sequel and installs the Sequel skill, so it knows this playbook exists and reads it when a question matches. The CLI signs you in, provisions a scoped API key and writes the config for you.

Already have an MCP client?

https://api.sequel.sh/mcp

Point it at this URL and sign in when prompted, or send an API key from Settings as a Bearer token. Skills come with it; nothing else to install. Manual setup per client

  1. 1

    Install the Sequel CLI

    One line installs the latest CLI with whatever package manager you have.

    curl -fsSL https://sequel.sh/install | sh
  2. 2

    Sign in

    Authenticate in your browser and pick an organization.

    sequel login
  3. 3

    Install into your agent

    Writes the MCP config and installs the Sequel skill file for agents that support skills. Pick an agent from the list, or target one directly by its slug.

    sequel install
    • Claude Code
      sequel install claude-code
    • Claude
      sequel install claude
    • Cursor
      sequel install cursor
    • VS Code
      sequel install vscode
    • Windsurf
      sequel install windsurf
    • Zed
      sequel install zed
    • Codex
      sequel install codex
    • OpenClaw
      sequel install openclaw
    • Hermes
      sequel install hermes

More like this

Other SEO skills

Analyze high-ranking landing pages

See which pages perform best in organic search: the landing pages that earn the most clicks and impressions, the queries behind each one, and how they compare with competitor estimates from Ahrefs.

Audit internal links to important pages

Audit the site's own internal linking: crawl navigation and body links between the site's pages to find valuable pages with too few inbound internal links, orphan pages, and the handful of cross-links that would lift striking-distance rankings.

Audit or draft an llms.txt

Check whether the site has an llms.txt, whether it follows the spec and points at the pages that matter, and if it is missing draft one from the pages Search Console shows people actually find, so AI assistants get a curated map of the site instead of guessing.

Audit redirect chains and loops

Follow every redirect on the URLs Search Console still sends traffic to, on the sitemap, and on backlinked pages, to find chains, loops, redirects to the homepage, and temporary redirects that should be permanent, so link equity and crawl budget stop leaking.

Audit referring domain quality

Grade the domains linking to a site by authority, traffic and link count, spot concentration risk and link-farm patterns, and separate the referring domains that carry weight from the ones that are noise.

Audit titles and meta descriptions

Compare the title and meta description of each top page against the queries it actually ranks for in Search Console, and find missing, duplicate, truncated or misaligned metadata on the pages where a rewrite would earn the most clicks.

Put this playbook to work

Connect a source, ask the question, and the agent follows these steps. Free to start.