1:"$Sreact.fragment"
2:I[15579,["/_next/static/chunks/fd0661f1506dcbc6.js","/_next/static/chunks/94245cbda44972fe.js","/_next/static/chunks/af778fff4a0f4be6.js","/_next/static/chunks/b096b037d08e2f31.js"],"Navigation"]
3:I[3013,["/_next/static/chunks/fd0661f1506dcbc6.js","/_next/static/chunks/94245cbda44972fe.js","/_next/static/chunks/af778fff4a0f4be6.js","/_next/static/chunks/b096b037d08e2f31.js"],""]
14:I[41451,["/_next/static/chunks/fd0661f1506dcbc6.js","/_next/static/chunks/94245cbda44972fe.js","/_next/static/chunks/af778fff4a0f4be6.js","/_next/static/chunks/b096b037d08e2f31.js"],"Footer"]
15:I[47913,["/_next/static/chunks/316a3a63422f35de.js"],"OutletBoundary"]
16:"$Sreact.suspense"
:HL["/blog/posts/keyword-plan-idea-service/hero.jpg","image"]
:HL["/blog/posts/logo.png","image"]
0:{"buildId":"TlpKRvbES4zzM7LeczAM7","rsc":["$","$1","c",{"children":[[["$","$L2",null,{}],["$","main",null,{"className":"pt-20 md:pt-24","children":["$","article",null,{"children":[["$","header",null,{"className":"border-b border-border","children":["$","div",null,{"className":"container mx-auto px-6 py-14 md:py-20","children":[["$","$L3",null,{"href":"/blog","className":"mb-8 inline-flex items-center text-sm font-medium text-muted-foreground transition-colors hover:text-foreground","children":[["$","svg",null,{"xmlns":"http://www.w3.org/2000/svg","width":24,"height":24,"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":2,"strokeLinecap":"round","strokeLinejoin":"round","className":"lucide lucide-arrow-left mr-2 h-4 w-4","aria-hidden":"true","children":[["$","path","1l729n",{"d":"m12 19-7-7 7-7"}],["$","path","x3x0zl",{"d":"M19 12H5"}],"$undefined"]}],"Blog"]}],["$","div",null,{"className":"grid gap-8 md:grid-cols-[1fr_0.9fr] md:items-start","children":[["$","div",null,{"className":"max-w-3xl","children":[["$","div",null,{"className":"mb-5 flex flex-wrap items-center gap-3 text-sm text-muted-foreground","children":[["$","span",null,{"className":"rounded-md border border-primary/40 bg-primary/10 px-2.5 py-1 text-primary","children":"Research"}],["$","span",null,{"children":"2026-W18"}],["$","span",null,{"aria-hidden":"true","children":"/"}],["$","span",null,{"children":"5 min read"}],null]}],["$","h1",null,{"className":"text-4xl font-bold leading-tight text-balance md:text-6xl","children":"What the Keyword Planner API Actually Tells You (And What It Hides)"}],["$","p",null,{"className":"mt-6 text-lg leading-relaxed text-muted-foreground md:text-xl","children":"Keyword research gets much better when you understand what Google's API gives you, and what it quietly withholds."}]]}],["$","div",null,{"className":"overflow-hidden rounded-lg border border-border bg-card","children":["$","div",null,{"className":"relative aspect-[16/9] overflow-hidden","children":[null,["$","img",null,{"src":"/blog/posts/keyword-plan-idea-service/hero.jpg","alt":"A terminal window showing a raw JSON API response with search volume data, warm amber light on a dark desk, a coffee cup to the left — the quiet of early-morning research work.","className":"h-full w-full object-cover"}],["$","img",null,{"src":"/blog/posts/logo.png","alt":"","aria-hidden":"true","className":"pointer-events-none absolute right-4 top-4 h-[50px] w-[50px] mix-blend-screen"}]]}]}]]}]]}]}],["$","div",null,{"className":"container mx-auto px-6 py-12 md:py-16","children":["$","div",null,{"className":"grid gap-10 lg:grid-cols-[minmax(0,1fr)_280px] lg:items-start","children":[["$","div",null,{"className":"max-w-3xl text-muted-foreground","children":[[["$","h2","h2-0",{"className":"mt-12 text-2xl font-semibold leading-snug text-foreground first:mt-0","children":"The problem"}],"\n",["$","p","p-0",{"className":"mt-4 text-base leading-8 md:text-lg first:mt-0 first:text-xl first:leading-relaxed first:text-foreground md:first:text-2xl","children":["Keyword research for a new SaaS product is a guessing game unless you can quantify demand. The Google Ads interface gives you estimates, but you can't automate it or integrate it into a strategy workflow. You need the API — specifically, ",["$","code","code-0",{"className":"rounded bg-secondary px-1.5 py-0.5 text-[0.9em] text-foreground","children":"KeywordPlanIdeaService"}]," — to pull structured search volume data programmatically and shape a paid search budget against real numbers."]}],"\n",["$","h2","h2-1",{"className":"mt-12 text-2xl font-semibold leading-snug text-foreground first:mt-0","children":"The approach"}],"\n",["$","p","p-1",{"className":"mt-4 text-base leading-8 md:text-lg first:mt-0 first:text-xl first:leading-relaxed first:text-foreground md:first:text-2xl","children":["The ",["$","code","code-0",{"className":"rounded bg-secondary px-1.5 py-0.5 text-[0.9em] text-foreground","children":"KeywordPlanIdeaService.generate_keyword_ideas()"}]," method takes seed keywords and a geographic/language targeting spec and returns monthly search volume, competition index, and low/high CPC bid estimates. The key non-obvious detail is that the volume figures are bucketed — Google returns a range (","$L4",", ","$L5",", ","$L6",") not a raw number, and the exact monthly figure is a different field (","$L7",") that requires you to specify the ","$L8"," with the right ","$L9"," from your MCC hierarchy, not a child account ID. Getting this wrong silently returns data for the wrong account's historical context."]}],"\n","$La","\n","$Lb","\n","$Lc","\n","$Ld"],"$Le",null]}],null]}]}]]}]}],"$Lf"],["$L10","$L11","$L12"],"$L13"]}],"loading":null,"isPartial":false}
4:["$","code","code-1",{"className":"rounded bg-secondary px-1.5 py-0.5 text-[0.9em] text-foreground","children":"LOW"}]
5:["$","code","code-2",{"className":"rounded bg-secondary px-1.5 py-0.5 text-[0.9em] text-foreground","children":"MEDIUM"}]
6:["$","code","code-3",{"className":"rounded bg-secondary px-1.5 py-0.5 text-[0.9em] text-foreground","children":"HIGH"}]
7:["$","code","code-4",{"className":"rounded bg-secondary px-1.5 py-0.5 text-[0.9em] text-foreground","children":"avg_monthly_searches"}]
8:["$","code","code-5",{"className":"rounded bg-secondary px-1.5 py-0.5 text-[0.9em] text-foreground","children":"KeywordPlanIdeaServiceClient"}]
9:["$","code","code-6",{"className":"rounded bg-secondary px-1.5 py-0.5 text-[0.9em] text-foreground","children":"customer_id"}]
a:["$","p","p-2",{"className":"mt-4 text-base leading-8 md:text-lg first:mt-0 first:text-xl first:leading-relaxed first:text-foreground md:first:text-2xl","children":["The competition index is a float from 0.0 to 1.0 representing advertiser density in the auction. It is not a proxy for difficulty — a high-competition index just means a lot of advertisers are bidding, not that you can't win. CPC estimates are more useful: the spread between low (",["$","code","code-0",{"className":"rounded bg-secondary px-1.5 py-0.5 text-[0.9em] text-foreground","children":"low_top_of_page_bid_micros"}],") and high (",["$","code","code-1",{"className":"rounded bg-secondary px-1.5 py-0.5 text-[0.9em] text-foreground","children":"high_top_of_page_bid_micros"}],") tells you how volatile the auction is. A tight spread means stable pricing; a wide spread means aggressive bidding wars or thin auction depth."]}]
b:["$","p","p-3",{"className":"mt-4 text-base leading-8 md:text-lg first:mt-0 first:text-xl first:leading-relaxed first:text-foreground md:first:text-2xl","children":"For a campaign targeting \"alternative to [competitor]\" intent, I pulled three seed clusters across 30 target terms and found that the most commercially interesting terms were consistently mid-competition (0.4–0.6) with stable CPC spreads — the sweet spot for a new entrant with a controlled budget."}]
c:["$","h2","h2-2",{"className":"mt-12 text-2xl font-semibold leading-snug text-foreground first:mt-0","children":"What I learned"}]
d:["$","p","p-4",{"className":"mt-4 text-base leading-8 md:text-lg first:mt-0 first:text-xl first:leading-relaxed first:text-foreground md:first:text-2xl","children":"The API is most useful not for the raw numbers but for the structural relationships between terms. Volume tells you what people search; competition tells you who's bidding; CPC spread tells you how sure the market is of the value. A term with high volume, low competition, and a tight CPC spread is a structurally underserved niche. Those are the terms worth building campaign architecture around — not the obvious head terms where incumbents have established quality scores and you're fighting uphill from day one."}]
e:["$","div",null,{"className":"mt-14 border-t border-border pt-8","children":["$","$L3",null,{"href":"/platform","className":"inline-flex items-center text-sm font-medium text-primary transition-colors hover:text-primary/80","children":["Start a build",["$","svg",null,{"xmlns":"http://www.w3.org/2000/svg","width":24,"height":24,"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":2,"strokeLinecap":"round","strokeLinejoin":"round","className":"lucide lucide-arrow-right ml-2 h-4 w-4","aria-hidden":"true","children":[["$","path","1ays0h",{"d":"M5 12h14"}],["$","path","xquz4c",{"d":"m12 5 7 7-7 7"}],"$undefined"]}]]}]}]
f:["$","$L14",null,{}]
10:["$","script","script-0",{"src":"/_next/static/chunks/94245cbda44972fe.js","async":true}]
11:["$","script","script-1",{"src":"/_next/static/chunks/af778fff4a0f4be6.js","async":true}]
12:["$","script","script-2",{"src":"/_next/static/chunks/b096b037d08e2f31.js","async":true}]
13:["$","$L15",null,{"children":["$","$16",null,{"name":"Next.MetadataOutlet","children":"$@17"}]}]
17:null
