<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: SerpKite</title>
    <description>The latest articles on DEV Community by SerpKite (@serpkite).</description>
    <link>https://dev.to/serpkite</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4174238%2F87a36964-7d93-4725-b742-9a4bd4890fe1.jpg</url>
      <title>DEV Community: SerpKite</title>
      <link>https://dev.to/serpkite</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/serpkite"/>
    <language>en</language>
    <item>
      <title>Cheaper alternatives to the Google Search API in 2026</title>
      <dc:creator>SerpKite</dc:creator>
      <pubDate>Thu, 29 Oct 2026 20:49:23 +0000</pubDate>
      <link>https://dev.to/serpkite/cheaper-alternatives-to-the-google-search-api-in-2026-4kh2</link>
      <guid>https://dev.to/serpkite/cheaper-alternatives-to-the-google-search-api-in-2026-4kh2</guid>
      <description>&lt;p&gt;We build SerpKite, one of the alternatives below. Prices come from each vendor's public pricing page, checked October 25–29, 2026, and the links let you check them yourself.&lt;/p&gt;

&lt;p&gt;Google sells two ways to get its search results into code. The Custom Search JSON API costs $5 per 1,000 queries and stops working on January 1, 2027. Grounding with Google Search costs $14 per 1,000 requests and only hands results to a Gemini model. SERP APIs return the same public results page for $0.30 to $7.25 per 1,000.&lt;/p&gt;

&lt;h2&gt;
  
  
  Google's own options
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Option&lt;/th&gt;
&lt;th&gt;Price&lt;/th&gt;
&lt;th&gt;Free&lt;/th&gt;
&lt;th&gt;Limits&lt;/th&gt;
&lt;th&gt;Status&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://developers.google.com/custom-search/v1/overview" rel="noopener noreferrer"&gt;Custom Search JSON API&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;$5 per 1,000 queries&lt;/td&gt;
&lt;td&gt;100 queries a day&lt;/td&gt;
&lt;td&gt;10,000 queries a day&lt;/td&gt;
&lt;td&gt;Closed to new customers since January 20, 2026; shuts down January 1, 2027&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;a href="https://ai.google.dev/gemini-api/docs/pricing" rel="noopener noreferrer"&gt;Grounding with Google Search&lt;/a&gt; (Gemini API)&lt;/td&gt;
&lt;td&gt;$14 per 1,000 requests&lt;/td&gt;
&lt;td&gt;5,000 a month&lt;/td&gt;
&lt;td&gt;1,500 requests a day per project&lt;/td&gt;
&lt;td&gt;Available; returns a Gemini answer with sources, not a results list&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The Custom Search cap matters at volume: 10,000 a day tops out near 300,000 a month, so a million searches a month can't fit. Grounding's daily cap on the Gemini API stops you at about 45,000 a month; Google points heavier users to Vertex AI, which has a higher quota.&lt;/p&gt;

&lt;p&gt;Grounding also changes what you get back. You send a prompt, Gemini decides whether to search, and you receive an answer with citations. A rank tracker, an SEO tool or an agent with its own model needs the result list itself.&lt;/p&gt;

&lt;h2&gt;
  
  
  What 100k and 1M searches a month cost
&lt;/h2&gt;

&lt;p&gt;List prices for a Google web search of 10 results. The 100k column uses each vendor's price at that volume; the 1M column uses its 1M price.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Option&lt;/th&gt;
&lt;th&gt;$ per 1k at 100k&lt;/th&gt;
&lt;th&gt;100k / month&lt;/th&gt;
&lt;th&gt;1M / month&lt;/th&gt;
&lt;th&gt;Results from&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Grounding with Google Search&lt;/td&gt;
&lt;td&gt;$14.00&lt;/td&gt;
&lt;td&gt;Over the daily cap&lt;/td&gt;
&lt;td&gt;Over the daily cap&lt;/td&gt;
&lt;td&gt;Google, through Gemini&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://serpapi.com/pricing" rel="noopener noreferrer"&gt;SerpApi&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;$7.25&lt;/td&gt;
&lt;td&gt;$725&lt;/td&gt;
&lt;td&gt;$3,750&lt;/td&gt;
&lt;td&gt;Google&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Custom Search JSON API&lt;/td&gt;
&lt;td&gt;$5.00&lt;/td&gt;
&lt;td&gt;$485&lt;/td&gt;
&lt;td&gt;Over the daily cap&lt;/td&gt;
&lt;td&gt;Google (Programmable Search Engine)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://brave.com/search/api/" rel="noopener noreferrer"&gt;Brave Search API&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;$5.00&lt;/td&gt;
&lt;td&gt;$500&lt;/td&gt;
&lt;td&gt;$5,000&lt;/td&gt;
&lt;td&gt;Brave's own index&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.searchapi.io/pricing" rel="noopener noreferrer"&gt;SearchApi&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;$2.50&lt;/td&gt;
&lt;td&gt;$250&lt;/td&gt;
&lt;td&gt;$1,500&lt;/td&gt;
&lt;td&gt;Google&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://brightdata.com/pricing/serp" rel="noopener noreferrer"&gt;Bright Data&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;$1.31&lt;/td&gt;
&lt;td&gt;$131&lt;/td&gt;
&lt;td&gt;$1,110&lt;/td&gt;
&lt;td&gt;Google&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://oxylabs.io/products/web-api/scrape/pricing" rel="noopener noreferrer"&gt;Oxylabs&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;$0.90&lt;/td&gt;
&lt;td&gt;$90&lt;/td&gt;
&lt;td&gt;$700&lt;/td&gt;
&lt;td&gt;Google&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://serper.dev/" rel="noopener noreferrer"&gt;Serper&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;$0.75&lt;/td&gt;
&lt;td&gt;$75&lt;/td&gt;
&lt;td&gt;$500&lt;/td&gt;
&lt;td&gt;Google&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://serpkite.com/pricing" rel="noopener noreferrer"&gt;SerpKite&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;$0.60&lt;/td&gt;
&lt;td&gt;$60&lt;/td&gt;
&lt;td&gt;$600 ($300 in the batch lane)&lt;/td&gt;
&lt;td&gt;Google&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;a href="https://dataforseo.com/pricing" rel="noopener noreferrer"&gt;DataForSEO&lt;/a&gt; (Standard queue)&lt;/td&gt;
&lt;td&gt;$0.60&lt;/td&gt;
&lt;td&gt;$60&lt;/td&gt;
&lt;td&gt;$600&lt;/td&gt;
&lt;td&gt;Google&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://hasdata.com/prices" rel="noopener noreferrer"&gt;HasData&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;$0.50&lt;/td&gt;
&lt;td&gt;$50&lt;/td&gt;
&lt;td&gt;$350&lt;/td&gt;
&lt;td&gt;Google&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.scrapingdog.com/pricing/" rel="noopener noreferrer"&gt;Scrapingdog&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;$0.45&lt;/td&gt;
&lt;td&gt;$45&lt;/td&gt;
&lt;td&gt;$290&lt;/td&gt;
&lt;td&gt;Google&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The Custom Search figure subtracts the 3,000 free queries a month (100 a day). At 100k a month, every Google-backed API in the table except SerpApi costs less than Custom Search, and Scrapingdog costs a tenth of it.&lt;/p&gt;

&lt;p&gt;The cheapest list price is not always the cheapest invoice. Check three rules before you pick:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Credit expiry.&lt;/strong&gt; Serper's credits expire after 6 months. SerpApi, HasData, Oxylabs, Bright Data and Scrapingdog's Lite plan reset monthly. SerpKite and DataForSEO never expire credits, so a $300 SerpKite pack covers 500,000 searches whether you use them in one month or in ten.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Failed and empty searches.&lt;/strong&gt; SerpApi, SearchApi and Scrapingdog don't bill failed requests. SerpKite also refunds empty results, including a 200 response with no organic results. Ask the other vendors.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Minimum purchase.&lt;/strong&gt; Serper's cheapest pack is $50 and SerpKite's is $10. If you run 3,000 searches a month, the minimum decides your price more than the per-1k rate does.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Cheaper than SerpApi
&lt;/h2&gt;

&lt;p&gt;SerpApi charges $25 for 1,000 searches on its Starter plan and $7.25 per 1,000 at 100k a month. If you are leaving SerpApi over price, the other Google-backed APIs in the table cost $45 to $250 at 100k a month against SerpApi's $725.&lt;/p&gt;

&lt;p&gt;You give up some things when you leave. SerpApi covers dozens of engines, ships 11 official SDKs, holds an SOC 2 report and offers a $2M legal shield. SearchApi also offers the shield. If your legal team requires one, compare those two first; neither Serper, Scrapingdog nor SerpKite offers one.&lt;/p&gt;

&lt;h2&gt;
  
  
  Moving off the Custom Search JSON API
&lt;/h2&gt;

&lt;p&gt;If your code calls &lt;code&gt;googleapis.com/customsearch/v1&lt;/code&gt;, you can keep its request and response. SerpKite serves the same shape at &lt;code&gt;/customsearch/v1&lt;/code&gt;: &lt;code&gt;items[]&lt;/code&gt;, &lt;code&gt;searchInformation&lt;/code&gt; and &lt;code&gt;queries&lt;/code&gt;, with &lt;code&gt;start&lt;/code&gt;, &lt;code&gt;num&lt;/code&gt;, &lt;code&gt;gl&lt;/code&gt;, &lt;code&gt;hl&lt;/code&gt;, &lt;code&gt;lr&lt;/code&gt;, &lt;code&gt;safe&lt;/code&gt;, &lt;code&gt;dateRestrict&lt;/code&gt;, &lt;code&gt;siteSearch&lt;/code&gt; and &lt;code&gt;searchType=image&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Google:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;res&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://www.googleapis.com/customsearch/v1&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;key&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;GOOGLE_API_KEY&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;cx&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;CX&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;q&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;items&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;items&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[])&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;SerpKite:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;res&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://api.serpkite.com/customsearch/v1&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;key&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;SERPKITE_API_KEY&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;cx&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;CX&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;q&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;items&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;items&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[])&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;One difference to plan for: SerpKite accepts &lt;code&gt;cx&lt;/code&gt; and ignores it, so results come from the whole web. If your Programmable Search Engine searched a list of sites, move that list into the request with &lt;code&gt;siteSearch&lt;/code&gt; or &lt;code&gt;site:&lt;/code&gt; operators. The &lt;a href="https://serpkite.com/docs/guides/migrate-from-google-cse" rel="noopener noreferrer"&gt;migration guide&lt;/a&gt; covers the Python, Node and Go client libraries, and the &lt;a href="https://serpkite.com/blog/google-custom-search-api-shutdown" rel="noopener noreferrer"&gt;shutdown post&lt;/a&gt; has the timeline.&lt;/p&gt;

&lt;p&gt;If you switch to a different response shape anyway, compare more than price. Brave runs its own index, so results differ from Google's. Grounding needs Gemini in the loop. A SERP API returns what a person sees on google.com.&lt;/p&gt;

&lt;h2&gt;
  
  
  Free options
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Option&lt;/th&gt;
&lt;th&gt;Free searches&lt;/th&gt;
&lt;th&gt;Card&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Custom Search JSON API&lt;/td&gt;
&lt;td&gt;100 a day, until January 1, 2027, existing customers only&lt;/td&gt;
&lt;td&gt;Billing account&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Grounding with Google Search&lt;/td&gt;
&lt;td&gt;5,000 a month on Gemini 3 models&lt;/td&gt;
&lt;td&gt;Billing account&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bright Data&lt;/td&gt;
&lt;td&gt;5,000 a month&lt;/td&gt;
&lt;td&gt;Not stated&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Brave Search API&lt;/td&gt;
&lt;td&gt;$5 of calls a month (about 1,000)&lt;/td&gt;
&lt;td&gt;Required&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SerpKite&lt;/td&gt;
&lt;td&gt;2,500 on signup + 1,000 a month for verified accounts&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HasData&lt;/td&gt;
&lt;td&gt;1,000 a month&lt;/td&gt;
&lt;td&gt;Not stated&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Serper&lt;/td&gt;
&lt;td&gt;2,500 once&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SerpApi&lt;/td&gt;
&lt;td&gt;250 a month&lt;/td&gt;
&lt;td&gt;Not stated&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Scrapingdog&lt;/td&gt;
&lt;td&gt;100 credits once&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Where SerpKite is not the cheapest&lt;/strong&gt; Scrapingdog ($0.45 at 100k, $0.136 at its top tier), HasData ($0.50) and Serper's largest packs ($0.30) list lower prices than our $0.60. Our batch lane gets to $0.30 if your jobs can wait up to 15 minutes. We compete on credits that never expire, free failed and empty searches, Markdown output for LLMs and the drop-in Custom Search endpoint.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Is there a free Google Search API?&lt;/strong&gt; Until January 1, 2027, existing Custom Search customers get 100 free queries a day. New accounts can't sign up. Grounding gives 5,000 free requests a month, as Gemini answers. For a free list of Google results, use a SERP API's free tier from the table above.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What does the Google Search API cost?&lt;/strong&gt; The Custom Search JSON API costs $5 per 1,000 queries after 100 free a day, up to 10,000 a day. Grounding with Google Search costs $14 per 1,000 requests after 5,000 free a month.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is the cheapest Google search API?&lt;/strong&gt; On list price at volume: Scrapingdog, then HasData, Serper's large packs and the DataForSEO Standard queue. Effective price also depends on credit expiry and on whether failed and empty searches count.&lt;/p&gt;

&lt;p&gt;More side-by-side numbers: &lt;a href="https://serpkite.com/blog/serp-api-pricing-2026" rel="noopener noreferrer"&gt;SERP API pricing in 2026&lt;/a&gt;, &lt;a href="https://serpkite.com/compare/best-serp-api" rel="noopener noreferrer"&gt;Best SERP APIs in 2026&lt;/a&gt; and the &lt;a href="https://serpkite.com/compare/serpapi-alternatives" rel="noopener noreferrer"&gt;SerpApi alternatives&lt;/a&gt; page.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Drafted with AI assistance; the SerpKite team checked every price against the linked vendor pages. Originally published at &lt;a href="https://serpkite.com/blog/cheaper-google-search-api-alternatives" rel="noopener noreferrer"&gt;serpkite.com&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>google</category>
      <category>api</category>
      <category>python</category>
      <category>webdev</category>
    </item>
    <item>
      <title>SERP API pricing in 2026: 1,000 Google searches on 10 APIs</title>
      <dc:creator>SerpKite</dc:creator>
      <pubDate>Thu, 29 Oct 2026 20:49:19 +0000</pubDate>
      <link>https://dev.to/serpkite/serp-api-pricing-in-2026-1000-google-searches-on-10-apis-2ml9</link>
      <guid>https://dev.to/serpkite/serp-api-pricing-in-2026-1000-google-searches-on-10-apis-2ml9</guid>
      <description>&lt;p&gt;We build SerpKite, one of the ten APIs on this page, so read our picks with that in mind. Every price below links to a public pricing page we checked between &lt;strong&gt;October 25 and 29, 2026&lt;/strong&gt;. We measured latency for SerpKite only; for the other nine we quote the vendor or a third-party test and say which.&lt;/p&gt;

&lt;p&gt;A rank tracker pulling a million keywords a month and an AI agent making 2,000 searches a day pay different prices on the same API, and the cheapest list price often loses once you count expiring credits and paid failures. For one pick per use case, see &lt;a href="https://serpkite.com/compare/best-serp-api" rel="noopener noreferrer"&gt;Best SERP APIs in 2026&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quick answer
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;You need&lt;/th&gt;
&lt;th&gt;Start with&lt;/th&gt;
&lt;th&gt;Why&lt;/th&gt;
&lt;th&gt;Trade-off&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;The lowest price at 1M+ searches a month&lt;/td&gt;
&lt;td&gt;Scrapingdog&lt;/td&gt;
&lt;td&gt;$0.136 per 1k at its top list price&lt;/td&gt;
&lt;td&gt;Lite credits reset monthly; latency "a few seconds" (vendor)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cheap Google results below 100k a month&lt;/td&gt;
&lt;td&gt;Serper&lt;/td&gt;
&lt;td&gt;$0.75 per 1k at 100k, 2,500 free searches&lt;/td&gt;
&lt;td&gt;Credits expire after 6 months; JSON only&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Rank tracking that can wait a few minutes&lt;/td&gt;
&lt;td&gt;DataForSEO (Standard queue)&lt;/td&gt;
&lt;td&gt;$0.60 per 1k, credits never expire&lt;/td&gt;
&lt;td&gt;About 5 minutes per task; Live mode costs $2.00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Many engines, many SDKs, a legal shield&lt;/td&gt;
&lt;td&gt;SerpApi&lt;/td&gt;
&lt;td&gt;11 official SDKs, $2M legal shield&lt;/td&gt;
&lt;td&gt;$7.25 per 1k at 100k a month, monthly reset&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Google results inside an LLM agent&lt;/td&gt;
&lt;td&gt;SerpKite&lt;/td&gt;
&lt;td&gt;Markdown output, MCP server, failed and empty searches free, credits never expire&lt;/td&gt;
&lt;td&gt;$0.60 per 1k at best; Scrapingdog and Serper go lower at volume&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SERP data bundled with a proxy network&lt;/td&gt;
&lt;td&gt;Bright Data or Oxylabs&lt;/td&gt;
&lt;td&gt;One vendor for proxies, unblocking and SERPs&lt;/td&gt;
&lt;td&gt;$1.31 and $0.90 per 1k at 100k&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;If Google's own results don't matter for your use case, skip to APIs with their own index.&lt;/p&gt;

&lt;h2&gt;
  
  
  Price per 1,000 Google searches
&lt;/h2&gt;

&lt;p&gt;Prices are list prices for a Google web search of 10 results, in US dollars per 1,000 searches, from each vendor's pricing page on October 25, 2026, with Oxylabs, Decodo, Brave and Scrapingdog rechecked on October 29.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;API&lt;/th&gt;
&lt;th&gt;Free tier&lt;/th&gt;
&lt;th&gt;~$50 plan&lt;/th&gt;
&lt;th&gt;100k / month&lt;/th&gt;
&lt;th&gt;1M / month&lt;/th&gt;
&lt;th&gt;Best list price&lt;/th&gt;
&lt;th&gt;Credits expire&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://serpkite.com/pricing" rel="noopener noreferrer"&gt;SerpKite&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;2,500 on signup + 1,000 a month, no card&lt;/td&gt;
&lt;td&gt;$0.80&lt;/td&gt;
&lt;td&gt;$0.60&lt;/td&gt;
&lt;td&gt;$0.60&lt;/td&gt;
&lt;td&gt;$0.60 ($0.30 in the batch lane)&lt;/td&gt;
&lt;td&gt;Never&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://serper.dev/" rel="noopener noreferrer"&gt;Serper&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;2,500 once, no card&lt;/td&gt;
&lt;td&gt;$1.00&lt;/td&gt;
&lt;td&gt;$0.75&lt;/td&gt;
&lt;td&gt;$0.50&lt;/td&gt;
&lt;td&gt;$0.30&lt;/td&gt;
&lt;td&gt;After 6 months&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.scrapingdog.com/pricing/" rel="noopener noreferrer"&gt;Scrapingdog&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;100 credits&lt;/td&gt;
&lt;td&gt;$1.00&lt;/td&gt;
&lt;td&gt;$0.45&lt;/td&gt;
&lt;td&gt;$0.29&lt;/td&gt;
&lt;td&gt;$0.136&lt;/td&gt;
&lt;td&gt;Monthly on Lite; rollover from Standard ($90) up&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://hasdata.com/prices" rel="noopener noreferrer"&gt;HasData&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;1,000 a month&lt;/td&gt;
&lt;td&gt;$1.23&lt;/td&gt;
&lt;td&gt;$0.50&lt;/td&gt;
&lt;td&gt;$0.35&lt;/td&gt;
&lt;td&gt;$0.35&lt;/td&gt;
&lt;td&gt;Monthly&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://dataforseo.com/pricing" rel="noopener noreferrer"&gt;DataForSEO&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;$1 trial&lt;/td&gt;
&lt;td&gt;$0.60 / $2.00&lt;/td&gt;
&lt;td&gt;$0.60 / $2.00&lt;/td&gt;
&lt;td&gt;$0.60 / $2.00&lt;/td&gt;
&lt;td&gt;$0.60 / $2.00&lt;/td&gt;
&lt;td&gt;Never&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://oxylabs.io/products/web-api/scrape/pricing" rel="noopener noreferrer"&gt;Oxylabs&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;$5 credit (~5,000 results)&lt;/td&gt;
&lt;td&gt;$1.00&lt;/td&gt;
&lt;td&gt;$0.90&lt;/td&gt;
&lt;td&gt;$0.70&lt;/td&gt;
&lt;td&gt;$0.70 self-serve ($0.50 on Enterprise)&lt;/td&gt;
&lt;td&gt;Monthly&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://brightdata.com/pricing/serp" rel="noopener noreferrer"&gt;Bright Data&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;5,000 a month&lt;/td&gt;
&lt;td&gt;$1.50&lt;/td&gt;
&lt;td&gt;$1.31&lt;/td&gt;
&lt;td&gt;$1.11&lt;/td&gt;
&lt;td&gt;$1.00&lt;/td&gt;
&lt;td&gt;Monthly&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.searchapi.io/pricing" rel="noopener noreferrer"&gt;SearchApi&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;100 requests&lt;/td&gt;
&lt;td&gt;$4.00&lt;/td&gt;
&lt;td&gt;$2.50&lt;/td&gt;
&lt;td&gt;$1.50&lt;/td&gt;
&lt;td&gt;$1.00&lt;/td&gt;
&lt;td&gt;Not stated&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://serpapi.com/pricing" rel="noopener noreferrer"&gt;SerpApi&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;250 a month&lt;/td&gt;
&lt;td&gt;$15–25&lt;/td&gt;
&lt;td&gt;$7.25&lt;/td&gt;
&lt;td&gt;$3.75&lt;/td&gt;
&lt;td&gt;$1.96&lt;/td&gt;
&lt;td&gt;Monthly reset&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Oxylabs prices Google without JavaScript rendering; with rendering it starts at $1.35. Decodo folded its SERP scraper into a Web Data API priced per crawl ($49 a month for up to 65,000 crawls), so we left it out of the per-search table. DataForSEO's two numbers are its Standard queue (results in about five minutes) and Live mode (seconds). SerpKite's $0.80 and $0.60 come from the $50 Growth and $300 Pro packs; the $10 Starter pack works out to $1.00.&lt;/p&gt;

&lt;p&gt;Divide by 1,000 and you get the price of a single search: SerpApi's 100k tier is $0.00725 per call, Scrapingdog's best is $0.000136.&lt;/p&gt;

&lt;h2&gt;
  
  
  Billing rules that change the bill
&lt;/h2&gt;

&lt;p&gt;Two APIs with the same list price can send you different invoices. Check four rules before you compare totals.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Credit expiry.&lt;/strong&gt; Say you buy Serper's $50 pack for 50,000 searches and your agent uses 20,000 in six months. You lose the other 30,000, so you paid $2.50 per 1k for what you used. On a monthly plan that resets, every unused search is lost at the end of the month. SerpKite and DataForSEO don't expire credits, so a pack bought in a busy month keeps working through a quiet one.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Failed and empty searches.&lt;/strong&gt; SerpApi, SearchApi and Scrapingdog don't charge for failed requests. SerpKite refunds failed searches and empty ones, including a 200 response with no organic results. Firecrawl charges for a page that answers 403 or 404, and Perplexity's Search API charges for a successful response with no results. The other vendors don't publish a rule; ask them before you sign up, because an agent that searches rare entities hits empty pages often.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Depth.&lt;/strong&gt; On September 14, 2025, Google stopped honoring &lt;code&gt;&amp;amp;num=100&lt;/code&gt;, so the top 100 now takes ten requests. Per-page vendors charge 10× for it. Serper charges 2 credits for 11–100 results. SerpKite charges 7 credits for &lt;code&gt;num=100&lt;/code&gt;, or 3.5 in the batch lane. We wrote up the math in &lt;a href="https://serpkite.com/blog/num-100-removed-top-100-tracking-cost" rel="noopener noreferrer"&gt;num=100 is gone&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Async discounts.&lt;/strong&gt; DataForSEO's Standard queue and SerpKite's &lt;a href="https://serpkite.com/docs/batch" rel="noopener noreferrer"&gt;batch lane&lt;/a&gt; both trade a few minutes of waiting for a lower price: $0.60 against $2.00 on DataForSEO, half price on SerpKite. A nightly rank-tracking job can wait.&lt;/p&gt;

&lt;h2&gt;
  
  
  Speed
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;API&lt;/th&gt;
&lt;th&gt;Latency&lt;/th&gt;
&lt;th&gt;Source&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;SerpKite&lt;/td&gt;
&lt;td&gt;p50 1.0 s, p95 1.7 s (60 queries, 12 countries, 60/60 succeeded)&lt;/td&gt;
&lt;td&gt;Our &lt;a href="https://serpkite.com/benchmarks" rel="noopener noreferrer"&gt;benchmark&lt;/a&gt;, October 24, 2026&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Serper&lt;/td&gt;
&lt;td&gt;1–2 s&lt;/td&gt;
&lt;td&gt;Vendor&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SearchApi&lt;/td&gt;
&lt;td&gt;Under 2 s&lt;/td&gt;
&lt;td&gt;Vendor&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SerpApi&lt;/td&gt;
&lt;td&gt;~3 s average, range 0.07–13 s&lt;/td&gt;
&lt;td&gt;Vendor&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bright Data&lt;/td&gt;
&lt;td&gt;Under 5 s&lt;/td&gt;
&lt;td&gt;Vendor&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DataForSEO&lt;/td&gt;
&lt;td&gt;Live mode up to 6 s; Standard about 5 min&lt;/td&gt;
&lt;td&gt;Vendor&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Oxylabs&lt;/td&gt;
&lt;td&gt;6 s average (sub-second "fast" API)&lt;/td&gt;
&lt;td&gt;Vendor&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Decodo&lt;/td&gt;
&lt;td&gt;~10.7 s&lt;/td&gt;
&lt;td&gt;Third-party test&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Treat vendor numbers as claims to test. Latency depends on the country, the query and the time of day, so run your own queries from your own region (script below).&lt;/p&gt;

&lt;h2&gt;
  
  
  Output for LLM agents
&lt;/h2&gt;

&lt;p&gt;If an LLM reads the results, the format costs money twice: once for the search and again for the tokens. On a sample of 60 queries we measured a median of 1,139 tokens for a full JSON results page and 723 for compact output. &lt;a href="https://serpkite.com/blog/json-vs-markdown-serp-tokens" rel="noopener noreferrer"&gt;JSON vs Markdown SERPs&lt;/a&gt; has the method.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;API&lt;/th&gt;
&lt;th&gt;Markdown output&lt;/th&gt;
&lt;th&gt;Official MCP server&lt;/th&gt;
&lt;th&gt;Page content in the same call&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;SerpKite&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;&lt;code&gt;include_content&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SerpApi&lt;/td&gt;
&lt;td&gt;Since August 2026&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DataForSEO&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Serper&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Separate endpoint&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Scrapingdog&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Google also changed result links in 2026: many now go through a &lt;code&gt;/goto&lt;/code&gt; redirect. A rank tracker or agent that stores the raw link records Google's URL, not the site. SerpKite and SerpApi return the resolved destination; check the others with a few queries before you build on them. Background: &lt;a href="https://serpkite.com/blog/google-goto-links-rank-tracker-fix" rel="noopener noreferrer"&gt;Google /goto links&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  The ten APIs in short
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;SerpKite.&lt;/strong&gt; Google web search and its verticals (news, images, maps, shopping, scholar and more), AI assistant answers (ChatGPT, Gemini, Copilot, Google AI Mode) and page extraction, with JSON or Markdown output, MCP and SDKs for TypeScript, Python and Go. Pick it for agents and for teams that buy credits in bursts. Skip it if you need a legal shield or SOC 2 today; we offer neither yet.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Serper.&lt;/strong&gt; Fast, cheap JSON for Google web, images, news and places. Pick it for prototypes and steady traffic under 100k a month. Watch the six-month expiry on larger packs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Scrapingdog.&lt;/strong&gt; The lowest top-tier list price we found. Pick it for high-volume jobs where a few seconds per call is fine.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;HasData.&lt;/strong&gt; $0.35 per 1k at volume with 1,000 free searches a month. A good second vendor for failover.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;DataForSEO.&lt;/strong&gt; The rank-tracking workhorse, with dozens of SEO endpoints beyond SERPs. Pick the Standard queue for nightly jobs; Live mode costs more than three times as much.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Oxylabs.&lt;/strong&gt; A proxy company with a scraper API on top; the $0.50 tier needs an Enterprise contract from $2,500 a month. Pick it if you already buy its proxies and want one invoice. Decodo fits the same profile with per-crawl pricing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bright Data.&lt;/strong&gt; A big proxy network, 5,000 free requests a month and a higher per-search price than the SERP specialists.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SearchApi.&lt;/strong&gt; Many engines beyond Google, pay-per-success billing and a $2M legal shield. The price drops to $1.00 only at high volume.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SerpApi.&lt;/strong&gt; The oldest and broadest: dozens of engines, 11 SDKs, a $2M legal shield and an SOC 2 report. You pay for it: $7.25 per 1k at 100k a month.&lt;/p&gt;

&lt;h2&gt;
  
  
  Not Google: APIs with their own index
&lt;/h2&gt;

&lt;p&gt;These APIs run their own index or an unnamed upstream. Results differ from Google's, which is fine for many agent tasks and wrong for SEO work or anything that has to match what a person sees on google.com.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;API&lt;/th&gt;
&lt;th&gt;Price per 1k&lt;/th&gt;
&lt;th&gt;Free tier&lt;/th&gt;
&lt;th&gt;Index&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://brave.com/search/api/" rel="noopener noreferrer"&gt;Brave Search API&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;$5.00 flat&lt;/td&gt;
&lt;td&gt;$5 of calls a month (about 1,000 searches), card required&lt;/td&gt;
&lt;td&gt;Brave&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.tavily.com/pricing" rel="noopener noreferrer"&gt;Tavily&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;$7.50 entry, $5.00 at 100k&lt;/td&gt;
&lt;td&gt;1,000 a month&lt;/td&gt;
&lt;td&gt;Own&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://exa.ai/pricing" rel="noopener noreferrer"&gt;Exa&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;$7.00 ($4.00 Lite Search)&lt;/td&gt;
&lt;td&gt;$10 a month + $10 on signup&lt;/td&gt;
&lt;td&gt;Own&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.firecrawl.dev/pricing" rel="noopener noreferrer"&gt;Firecrawl&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;$7.60 on Hobby to $1.20 on Scale (yearly)&lt;/td&gt;
&lt;td&gt;1,000 credits a month&lt;/td&gt;
&lt;td&gt;Unnamed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://docs.perplexity.ai/docs/getting-started/pricing" rel="noopener noreferrer"&gt;Perplexity Search API&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;$5.00 ($1.00 Fast Search)&lt;/td&gt;
&lt;td&gt;None published&lt;/td&gt;
&lt;td&gt;Own&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Test before you commit
&lt;/h2&gt;

&lt;p&gt;Fifty of your own queries tell you more than any comparison page, ours included. The script below runs a query list against an API, then prints p50, p95 and how many responses came back empty. Swap the request function to test another vendor.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;
&lt;span class="n"&gt;QUERIES&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;line&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;strip&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;line&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;queries.txt&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;line&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;strip&lt;/span&gt;&lt;span class="p"&gt;()]&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;serpkite&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;q&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://api.serpkite.com/v1/search&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;q&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;q&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;country&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;us&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Authorization&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Bearer &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;SERPKITE_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="n"&gt;timeout&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;raise_for_status&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;results&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[])&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;run&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;search&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;times&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;empty&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;errors&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[],&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;q&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;QUERIES&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;t&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;perf_counter&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;results&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;search&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;q&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="nb"&gt;Exception&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;errors&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
            &lt;span class="k"&gt;continue&lt;/span&gt;
        &lt;span class="n"&gt;times&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;perf_counter&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;empty&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;results&lt;/span&gt;
    &lt;span class="n"&gt;times&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sort&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;p95&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;times&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nf"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;times&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mf"&gt;0.95&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;times&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;p50 &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;statistics&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;median&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;times&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;s  p95 &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;p95&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;s  empty &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;empty&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;  errors &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;errors&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;run&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;serpkite&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Pick queries from your real workload: brand names, long-tail questions, local searches in the countries you sell to. Compare the top five links against a manual search, and count the empty responses, because some vendors bill them.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Where SerpKite loses&lt;/strong&gt; Scrapingdog and Serper list lower prices at volume. DataForSEO's Standard queue matches our best price with a longer track record. SerpApi and SearchApi offer a $2M legal shield and SerpApi has SOC 2; we have neither. We launched in 2026, so you get less history to judge us by.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Is there a free SERP API?&lt;/strong&gt; Every vendor above has a free tier. For recurring free searches: SerpKite gives 1,000 a month to verified accounts, HasData 1,000, Bright Data 5,000 and SerpApi 250. Serper's 2,500 come once. Google's own Custom Search JSON API gives 100 a day, but it no longer accepts new customers and shuts down on January 1, 2027 (&lt;a href="https://serpkite.com/blog/google-custom-search-api-shutdown" rel="noopener noreferrer"&gt;what to do&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Which SERP API is cheapest?&lt;/strong&gt; On list price, Scrapingdog ($0.136 per 1k at its top tier) and Serper ($0.30 on its largest pack). Your effective price also depends on expiry and on whether failed and empty searches count.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Do I need Google results, or will Brave or Tavily do?&lt;/strong&gt; Use Google results when you need to match what users see on google.com: SEO, rank tracking, brand monitoring, local and shopping data. Use an independent index when relevance matters more than Google parity and the price per 1k fits.&lt;/p&gt;

&lt;p&gt;See all vendor rows side by side on our &lt;a href="https://serpkite.com/compare" rel="noopener noreferrer"&gt;comparison pages&lt;/a&gt;, or try SerpKite in the &lt;a href="https://serpkite.com/playground" rel="noopener noreferrer"&gt;playground&lt;/a&gt; without a card.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Drafted with AI assistance; the SerpKite team checked every price against the linked vendor pages. Originally published at &lt;a href="https://serpkite.com/blog/serp-api-pricing-2026" rel="noopener noreferrer"&gt;serpkite.com&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>api</category>
      <category>webdev</category>
      <category>python</category>
      <category>ai</category>
    </item>
    <item>
      <title>Google Custom Search JSON API ends Jan 1, 2027: what to do</title>
      <dc:creator>SerpKite</dc:creator>
      <pubDate>Sat, 24 Oct 2026 22:45:43 +0000</pubDate>
      <link>https://dev.to/serpkite/google-custom-search-json-api-ends-jan-1-2027-what-to-do-5b5g</link>
      <guid>https://dev.to/serpkite/google-custom-search-json-api-ends-jan-1-2027-what-to-do-5b5g</guid>
      <description>&lt;p&gt;If your app calls &lt;code&gt;https://www.googleapis.com/customsearch/v1&lt;/code&gt;, it has a hard deadline. Google closed the Custom Search JSON API to new customers on &lt;strong&gt;January 20, 2026&lt;/strong&gt;, and the API &lt;strong&gt;shuts down on January 1, 2027&lt;/strong&gt;. After that, requests fail.&lt;/p&gt;

&lt;p&gt;This post covers the timeline, what your options are, and how to migrate with the smallest possible diff.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Deadline: January 1, 2027.&lt;/strong&gt; Plan to switch at least two weeks before the deadline, so December change freezes and holidays don't catch you.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  The timeline
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Date&lt;/th&gt;
&lt;th&gt;What happened&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;2026-01-20&lt;/td&gt;
&lt;td&gt;Custom Search JSON API closed to new customers; shutdown date set for 2027-01-01&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Aug–Sep 2026&lt;/td&gt;
&lt;td&gt;Docs for a partner-only "Web Search Service API" appear, then get pulled&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;2027-01-01&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;The JSON API stops serving requests&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The partner-only API matters because it was the only hint of an official successor. As of today there is &lt;strong&gt;no self-serve official Google web search API&lt;/strong&gt; you can sign up for after the shutdown.&lt;/p&gt;

&lt;h2&gt;
  
  
  What breaks on January 1
&lt;/h2&gt;

&lt;p&gt;The shutdown is at the endpoint, so everything that reaches it stops at once:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Direct HTTP calls&lt;/strong&gt; to &lt;code&gt;https://www.googleapis.com/customsearch/v1&lt;/code&gt;, whatever language or tool sends them.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Google's client libraries&lt;/strong&gt;, which call the same endpoint: Python's &lt;code&gt;googleapiclient.discovery.build("customsearch", "v1")&lt;/code&gt;, the Node &lt;code&gt;googleapis&lt;/code&gt; customsearch client, the Go &lt;code&gt;customsearch/v1&lt;/code&gt; package and their equivalents.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No-code flows&lt;/strong&gt; whose HTTP or "Google Custom Search" nodes point at it (n8n, Make, Zapier, Pipedream).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Plugins and integrations&lt;/strong&gt; that fetch results as JSON for site search or "related content" features.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;API keys and quotas&lt;/strong&gt; in Google Cloud: the keys stay, but there is nothing left for them to call.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Plan for the calls to fail, not to slow down: add a timeout and an error path now, so a forgotten caller degrades instead of crashing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who is affected
&lt;/h2&gt;

&lt;p&gt;Anything that reads &lt;code&gt;items[]&lt;/code&gt; from the CSE JSON API:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;SaaS features that "search the web" behind the scenes (research assistants, fact-checking, content tools).&lt;/li&gt;
&lt;li&gt;Internal tools and scripts, often years old, that nobody remembers owning.&lt;/li&gt;
&lt;li&gt;No-code flows in n8n, Make and Zapier that call the endpoint through an HTTP node.&lt;/li&gt;
&lt;li&gt;Agent tools that wrap CSE because it was the official, cheap option.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Find them with a code search for &lt;code&gt;googleapis.com/customsearch&lt;/code&gt; across your repos, and check your Google Cloud console for projects with the Custom Search API enabled.&lt;/p&gt;

&lt;h2&gt;
  
  
  Your options
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Drop the feature.&lt;/strong&gt; Sometimes right for internal scripts. Rarely right for customer-facing features.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Move to a different kind of search.&lt;/strong&gt; AI-native search APIs (Tavily, Exa, Brave) run their own index. Results and response shapes differ, so you rewrite the integration and re-test relevance.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use a SERP API that speaks CSE.&lt;/strong&gt; You keep the same request and response, and the results are Google's public results page.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;We built SerpKite's &lt;code&gt;/customsearch/v1&lt;/code&gt; endpoint for option 3. It accepts &lt;code&gt;key&lt;/code&gt;, &lt;code&gt;cx&lt;/code&gt;, &lt;code&gt;q&lt;/code&gt;, &lt;code&gt;start&lt;/code&gt;, &lt;code&gt;num&lt;/code&gt;, &lt;code&gt;gl&lt;/code&gt;, &lt;code&gt;hl&lt;/code&gt;, &lt;code&gt;lr&lt;/code&gt;, &lt;code&gt;safe&lt;/code&gt;, &lt;code&gt;dateRestrict&lt;/code&gt;, &lt;code&gt;siteSearch&lt;/code&gt; and &lt;code&gt;searchType=image&lt;/code&gt;, and returns &lt;code&gt;kind&lt;/code&gt;, &lt;code&gt;searchInformation&lt;/code&gt;, &lt;code&gt;items[]&lt;/code&gt; and &lt;code&gt;queries&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  The migration
&lt;/h2&gt;

&lt;p&gt;Before (Google):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;res&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://www.googleapis.com/customsearch/v1&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;key&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;GOOGLE_API_KEY&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;cx&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;CX&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;q&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;start&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;items&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;items&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[])&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After (SerpKite):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;res&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://api.serpkite.com/customsearch/v1&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;key&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;SERPKITE_API_KEY&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;cx&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;CX&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;q&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;start&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;items&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;items&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[])&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Two lines: the hostname and the key. Your parsing code doesn't change.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;The one real difference: cx is ignored.&lt;/strong&gt; SerpKite searches the public Google results page, so settings from the Programmable Search console (site lists, promotions, custom ranking) are not applied. If your engine was restricted to your own domains, add &lt;code&gt;siteSearch=example.com&lt;/code&gt; or &lt;code&gt;site:a.com OR site:b.com&lt;/code&gt; to the query.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  A ten-week plan
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;When&lt;/th&gt;
&lt;th&gt;Do&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;This week&lt;/td&gt;
&lt;td&gt;Search your repos for &lt;code&gt;googleapis.com/customsearch&lt;/code&gt; and &lt;code&gt;customsearch&lt;/code&gt;, and list every Google Cloud project with the Custom Search API enabled&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Next week&lt;/td&gt;
&lt;td&gt;Create a SerpKite key per caller, give each a monthly credit limit, and swap the hostname on one low-risk caller&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Weeks 3–4&lt;/td&gt;
&lt;td&gt;Run a few dozen real queries through both endpoints and compare &lt;code&gt;items[].link&lt;/code&gt;; recreate site restrictions with &lt;code&gt;siteSearch&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Weeks 5–7&lt;/td&gt;
&lt;td&gt;Move the remaining callers, no-code flows included&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;By mid-December&lt;/td&gt;
&lt;td&gt;Turn off the Custom Search API in Google Cloud and watch for errors from anything you missed&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  A checklist before January
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Inventory every caller of the CSE endpoint, including no-code flows.&lt;/li&gt;
&lt;li&gt;Swap the hostname and key. Prefer sending the key as an &lt;code&gt;Authorization: Bearer&lt;/code&gt; header so it stays out of URLs and logs.&lt;/li&gt;
&lt;li&gt;Recreate site restrictions with &lt;code&gt;siteSearch&lt;/code&gt; or &lt;code&gt;site:&lt;/code&gt; operators.&lt;/li&gt;
&lt;li&gt;Update error handling. SerpKite errors look like &lt;code&gt;{"error":{"code","message","request_id"}}&lt;/code&gt;. Failed calls (&lt;code&gt;503&lt;/code&gt;) are not billed and are safe to retry.&lt;/li&gt;
&lt;li&gt;Run a few dozen real queries through both endpoints and compare &lt;code&gt;items[].link&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Set a spend cap in the dashboard so a runaway loop can't surprise you.&lt;/li&gt;
&lt;li&gt;Deploy well before the holidays. December 31 is a bad day to find a forgotten cron job.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Cost
&lt;/h2&gt;

&lt;p&gt;Google charged $5 per 1,000 queries after 100 free queries a day, with a cap of 10,000 queries a day. On SerpKite each &lt;code&gt;/customsearch/v1&lt;/code&gt; call is 1 credit, packs run from $1.00 per 1,000 down to $0.60, there's no daily cap, and credits never expire. You get 2,500 free credits on signup and 1,000 a month after that. Details are on the &lt;a href="https://serpkite.com/pricing" rel="noopener noreferrer"&gt;pricing page&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Next steps
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;The full parameter mapping and gotchas: &lt;a href="https://serpkite.com/migrate/google-custom-search-api" rel="noopener noreferrer"&gt;Migrate from the Google Custom Search JSON API&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Paste an existing CSE URL into the &lt;a href="https://serpkite.com/tools/cse-migration" rel="noopener noreferrer"&gt;CSE migration helper&lt;/a&gt; to get the SerpKite equivalent.&lt;/li&gt;
&lt;li&gt;Need more than &lt;code&gt;items[]&lt;/code&gt;? The &lt;a href="https://serpkite.com/apis/google-search-api" rel="noopener noreferrer"&gt;Google Search API&lt;/a&gt; returns the knowledge graph, People Also Ask and Markdown output.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Runnable Python and Node.js versions of the migration, with a &lt;code&gt;--check&lt;/code&gt; flag that compares response keys: &lt;a href="https://github.com/SerpKite/custom-search-api-migration" rel="noopener noreferrer"&gt;SerpKite/custom-search-api-migration&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Disclosure: I work on SerpKite. This post first appeared on the &lt;a href="https://serpkite.com/blog/google-custom-search-api-shutdown" rel="noopener noreferrer"&gt;SerpKite blog&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>google</category>
      <category>api</category>
      <category>python</category>
      <category>webdev</category>
    </item>
    <item>
      <title>JSON vs Markdown SERPs: we measured tokens</title>
      <dc:creator>SerpKite</dc:creator>
      <pubDate>Fri, 09 Oct 2026 21:22:01 +0000</pubDate>
      <link>https://dev.to/serpkite/json-vs-markdown-serps-we-measured-tokens-m5l</link>
      <guid>https://dev.to/serpkite/json-vs-markdown-serps-we-measured-tokens-m5l</guid>
      <description>&lt;p&gt;When an agent calls a search tool, the whole response lands in the model's context. You pay for every token, and the model has to read past every one of them to find the three links that matter. So the format of a SERP response is not a detail: it is a cost line and a quality lever.&lt;/p&gt;

&lt;p&gt;We took one Google results page and rendered it three ways.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;These are &lt;strong&gt;estimates on a single sample&lt;/strong&gt;, not a benchmark. The sample is an abridged results page (an answer box, three organic results, two People Also Ask questions, three related searches). Tokens are estimated at about 4 characters per token. Real pages are bigger and real tokenizers differ. The ratios are what to take away.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  The results
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Format&lt;/th&gt;
&lt;th&gt;Estimated tokens&lt;/th&gt;
&lt;th&gt;vs pretty JSON&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;JSON, pretty-printed&lt;/td&gt;
&lt;td&gt;668&lt;/td&gt;
&lt;td&gt;baseline&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;JSON, minified&lt;/td&gt;
&lt;td&gt;534&lt;/td&gt;
&lt;td&gt;-20%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;compact JSON&lt;/td&gt;
&lt;td&gt;248&lt;/td&gt;
&lt;td&gt;-63%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Markdown&lt;/td&gt;
&lt;td&gt;240&lt;/td&gt;
&lt;td&gt;-64%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;On this sample, Markdown is about 64% smaller than pretty JSON, and compact JSON about 63%. That is in line with the 60-80% reduction we see on full pages. For scale: a full, unfiltered Google SERP as JSON can reach roughly 24,700 tokens once every widget, sitelink and thumbnail is included. At that size the format choice is the difference between a cheap tool call and an expensive one.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where the tokens go in JSON
&lt;/h2&gt;

&lt;p&gt;Most of a JSON SERP is structure, not content: repeated keys (&lt;code&gt;"position"&lt;/code&gt;, &lt;code&gt;"title"&lt;/code&gt;, &lt;code&gt;"link"&lt;/code&gt;, &lt;code&gt;"snippet"&lt;/code&gt;), quotes, braces, indentation, and fields the model never uses (the request echo, metadata, sitelinks, thumbnails). Minifying helps with whitespace but keeps every key.&lt;/p&gt;

&lt;h2&gt;
  
  
  Compact: JSON for tools
&lt;/h2&gt;

&lt;p&gt;Compact JSON keeps the structure but shortens keys and drops fields agents rarely read. Use it when a program, not the model, consumes the output, or when your tool schema needs structured fields.&lt;/p&gt;

&lt;h2&gt;
  
  
  Markdown: text for models
&lt;/h2&gt;

&lt;p&gt;Markdown renders the page as prose with numbered links. Models read it the way they read any document, and citations stay attached to URLs:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gh"&gt;# best espresso machine 2026&lt;/span&gt;

&lt;span class="gu"&gt;## Results&lt;/span&gt;
&lt;span class="p"&gt;1.&lt;/span&gt; &lt;span class="gs"&gt;**The Best Espresso Machines of 2026, Tested and Reviewed**&lt;/span&gt; — example.com
   https://www.example.com/best-espresso-machines
   We pulled more than 1,200 shots on 42 machines to find the best espresso makers for every budget.
&lt;span class="p"&gt;2.&lt;/span&gt; &lt;span class="gs"&gt;**Espresso Machine Buying Guide (2026)**&lt;/span&gt; — coffee.example.org
   https://coffee.example.org/guides/espresso
   Single boiler, heat exchanger or dual boiler? What the specs mean.

&lt;span class="gu"&gt;## People also ask&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="gs"&gt;**What is the #1 rated espresso machine?**&lt;/span&gt; Reviewers most often rank dual-boiler machines with PID control at the top…

&lt;span class="gu"&gt;## Related searches&lt;/span&gt;
best espresso machine under $500 · best espresso machine for beginners
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Going further: project the fields
&lt;/h2&gt;

&lt;p&gt;If your agent only needs titles, links and the knowledge graph, ask for just those:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"q"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"best espresso machine 2026"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"fields"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"results.title,results.link,knowledge_graph"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Log an estimated token count per call (we return it in an &lt;code&gt;X-Tokens-Estimate&lt;/code&gt; response header) so you can see what each tool call actually costs you.&lt;/p&gt;

&lt;h2&gt;
  
  
  What we recommend
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Agent reads the results directly:&lt;/strong&gt; Markdown.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Code post-processes the results:&lt;/strong&gt; compact JSON or field projection.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You store results or need every field:&lt;/strong&gt; full JSON.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We built this into &lt;a href="https://serpkite.com" rel="noopener noreferrer"&gt;SerpKite&lt;/a&gt;, a Google SERP API for AI agents, where the three formats cost the same (1 credit per page). You can try them on your own queries in the &lt;a href="https://serpkite.com/tools/serp-token-counter" rel="noopener noreferrer"&gt;SERP token counter&lt;/a&gt;, and the parameters are in the &lt;a href="https://serpkite.com/docs" rel="noopener noreferrer"&gt;docs&lt;/a&gt;. Whichever API you use, measure your own pages before you pick a format.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://serpkite.com/blog/json-vs-markdown-serp-tokens" rel="noopener noreferrer"&gt;https://serpkite.com/blog/json-vs-markdown-serp-tokens&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>api</category>
      <category>webdev</category>
      <category>llm</category>
    </item>
  </channel>
</rss>
