<?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: Darshan Khandelwal</title>
    <description>The latest articles on DEV Community by Darshan Khandelwal (@darshan_sd).</description>
    <link>https://dev.to/darshan_sd</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%2F888582%2Fddba8652-2d50-4f1d-80b0-90a91e32d075.jpeg</url>
      <title>DEV Community: Darshan Khandelwal</title>
      <link>https://dev.to/darshan_sd</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/darshan_sd"/>
    <language>en</language>
    <item>
      <title>Best Rank Tracker APIs in 2026: Features, Pricing &amp; Performance</title>
      <dc:creator>Darshan Khandelwal</dc:creator>
      <pubDate>Wed, 05 Aug 2026 10:16:51 +0000</pubDate>
      <link>https://dev.to/darshan_sd/best-rank-tracker-apis-in-2026-features-pricing-performance-4p3m</link>
      <guid>https://dev.to/darshan_sd/best-rank-tracker-apis-in-2026-features-pricing-performance-4p3m</guid>
      <description>&lt;p&gt;A rank tracker API is essential for anyone serious about SEO, digital marketing, or competitive intelligence. Whether you’re building an in-house SEO tool or automating rank monitoring at scale, the right rank tracking API can make or break your workflow. Manually checking keyword positions on Google is slow and not scalable; a good API lets you programmatically monitor thousands of keywords across locations and devices.&lt;/p&gt;

&lt;p&gt;If you’ve ever tried building an SEO tool or automating rank monitoring at scale, you already know this: not all Rank Tracking APIs are created equal. Some are fast, some are affordable, and some are not developer-friendly. So, instead of blindly trusting marketing claims, I decided to test them all head-to-head.&lt;/p&gt;

&lt;p&gt;In this article, I’ll walk you through six of the most popular rank-tracking APIs&lt;/p&gt;

&lt;h2&gt;
  
  
  What Is a Rank Tracker API?
&lt;/h2&gt;

&lt;p&gt;A rank tracker API is a programmatic interface that lets you query Google (or other search engines) and retrieve keyword ranking data in structured JSON format. Unlike manual rank-checking tools, a rank tracker API can be integrated directly into your own dashboard, spreadsheet, or SEO platform, enabling automated, real-time position monitoring at scale.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who Needs a Rank Tracker API?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;SEO agencies track hundreds of client keywords daily&lt;/li&gt;
&lt;li&gt;SaaS founders building SEO tools or dashboards&lt;/li&gt;
&lt;li&gt;Developers automating competitor monitoring&lt;/li&gt;
&lt;li&gt;Content teams tracking blog post rankings over time&lt;/li&gt;
&lt;li&gt;Best Rank Tracking APIs Compared: Speed, Success Rate &amp;amp; Support&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Best Rank Tracking APIs Compared: Speed, Success Rate &amp;amp; Support
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbujbonxnsnvsx99fq6lt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbujbonxnsnvsx99fq6lt.png" alt=" " width="742" height="277"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How We Will Test Each Rank Tracker API
&lt;/h2&gt;

&lt;p&gt;Analysis will be made based on five attributes.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjsd2cckvg81zbj8eh54x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjsd2cckvg81zbj8eh54x.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
Scalability– Number of keywords that can be tracked at a time.&lt;/p&gt;

&lt;p&gt;Pricing– Per request cost.&lt;/p&gt;

&lt;p&gt;Developer-friendly– How easy is it for developers to integrate the API?&lt;/p&gt;

&lt;p&gt;Speed– How fast an API responds.&lt;/p&gt;

&lt;p&gt;Stability– Uptime of APIs.&lt;/p&gt;

&lt;p&gt;I will be using this Python code to test the APIs. We have also created a rank tracking tool with Google Sheets and Serp API, so check it out.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1import requests2import time3import random4import urllib.parse5 6# List of search terms7rank_tracking_terms = [8    "best running shoes",9    "digital marketing agency",10    "best cafe in Chicago",11    "seo tools for small business",12    "best rank tracking api"13]14# Replace with your actual API endpoint15# Make sure it includes {query} where the search term should be inserted16base_url = "https://api.example.com/rank-tracker?query={query}"17total_requests = 1018success_count = 019total_time = 020for i in range(total_requests):21    try:22        search_term = random.choice(rank_tracking_terms)23        encoded_query = urllib.parse.quote(search_term)  # URL encode the query24        url = base_url.format(query=encoded_query)25        start_time = time.time()26        response = requests.get(url)27        end_time = time.time()28        request_time = end_time - start_time29        total_time += request_time30        if response.status_code == 200:31            success_count += 132        print(f"Request {i+1}: '{search_term}' took {request_time:.2f}s | Status: {response.status_code}")33    except Exception as e:34        print(f"Request {i+1} with '{search_term}' failed due to: {str(e)}")35# Final Stats36average_time = total_time / total_requests37success_rate = (success_count / total_requests) * 10038print(f"\nTotal Requests: {total_requests}")39print(f"Successful: {success_count}")40print(f"Average Time: {average_time:.2f} seconds")41print(f"Success Rate: {success_rate:.2f}%")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Scrapingdog’s Rank Tracker API
&lt;/h2&gt;

&lt;p&gt;It offers the Google SERP API, which can be used to track keywords.&lt;/p&gt;

&lt;p&gt;The API will provide you with a JSON response, which will have a key by the name of position , which can be used to track the ranks of keywords in the Google search results.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ft38i6ptvf9g5eiw5znhu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ft38i6ptvf9g5eiw5znhu.png" alt=" " width="800" height="417"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Details
&lt;/h2&gt;

&lt;p&gt;Once you sign up, you will receive 1000 free credits. You can use them to test this API.&lt;/p&gt;

&lt;p&gt;Per keyword tracking, the cost would start at $0.001 and go below $0.00029  with a higher volume.&lt;/p&gt;

&lt;p&gt;Scrapingdog offers clear documentation, video tutorials, and blogs to help developers easily integrate APIs in their working environment. Our YouTube channel has multiple tutorials on Google SERP APIs.&lt;/p&gt;

&lt;p&gt;Customer support is available 24*7 to help you resolve any query related to the services offered.&lt;/p&gt;

&lt;h2&gt;
  
  
  Testing the API
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjtsx2yim6nepekonx6nh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjtsx2yim6nepekonx6nh.png" alt=" " width="681" height="330"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Scrapingdog is blazing fast, with an average speed of 1.31 seconds, and makes keyword tracking effortless.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flyeav8tsqy6wdwwnqgmg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flyeav8tsqy6wdwwnqgmg.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;On the flip side, using a sluggish SERP API can cripple your dashboard — sometimes to the point of freezing it. Just take a look at Neil Patel’s SEO tool; it struggles quite a bit, possibly because a turtle-speed API powers it.&lt;/p&gt;

&lt;p&gt;Note: Recently, the &lt;a href="https://searchengineland.com/google-num100-impact-data-462231" rel="noopener noreferrer"&gt;num=100 parameter was removed&lt;/a&gt;. Now, to scrape 100 results from Google, you need to make 10 API calls (each to retrieve 10 results). Due to this depreciation, the rank tracking tools &amp;amp; their pipeline broke.&lt;/p&gt;

&lt;p&gt;At Scrapingdog, we created our own rank tracking system using our Google Search API &amp;amp; n8n. You can &lt;a href="https://www.scrapingdog.com/no-code-tutorials/building-a-google-keyword-rank-tracker-using-google-serp-api-and-n8n/" rel="noopener noreferrer"&gt;check out the blog here&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  SerpAPI
&lt;/h2&gt;

&lt;p&gt;Serpapi also offers Google Scraping APIs that can scrape data from Google Search results and can be used as a rank tracker.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fy1bao72ql25kp041yr92.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fy1bao72ql25kp041yr92.png" alt=" " width="800" height="296"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Details
&lt;/h2&gt;

&lt;p&gt;First-time users will get 100 credits for free for testing the APIs.&lt;/p&gt;

&lt;p&gt;Per keyword tracking, the cost would start at $0.015 and go below $0.0075 with a higher volume.&lt;/p&gt;

&lt;p&gt;They have great documentation, and their API can be easily integrated within any working environment.&lt;/p&gt;

&lt;p&gt;Support is great and replies within minutes. You can contact them through chat support from the website or through emails.&lt;/p&gt;

&lt;h2&gt;
  
  
  Testing the API
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fyy5p0vg3du98yuz16q7g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fyy5p0vg3du98yuz16q7g.png" alt=" " width="682" height="296"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;With an average response time of just 2.49 seconds, SerpAPI proves to be a good solution.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F233o6qxz92ezf3lgzkl5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F233o6qxz92ezf3lgzkl5.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ideal for building responsive and reliable rank tracking tools with their Google Search API.&lt;/p&gt;

&lt;p&gt;This kind of use case is becoming common across many SaaS platforms. You can see more AI SaaS product ideas that startups are building today.&lt;/p&gt;

&lt;h2&gt;
  
  
  Brightdata
&lt;/h2&gt;

&lt;p&gt;Brightdata is another great choice for scraping search results and tracking keyword ranks.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Faoxc8al6ysgck0uyvrhe.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Faoxc8al6ysgck0uyvrhe.png" alt=" " width="800" height="314"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Details
&lt;/h2&gt;

&lt;p&gt;They do offer a few free credits for first-time users.&lt;/p&gt;

&lt;p&gt;The default pricing is $2.55/CPM, and if you have higher requirements, you can contact them.&lt;/p&gt;

&lt;p&gt;Documentation is clear and concise. Any developer can integrate their proxies and APIs easily.&lt;/p&gt;

&lt;p&gt;They have one of the best support systems in this scraping industry. Sometimes, it feels like they are just waiting for your query to drop. They will answer your query with lightning-fast speed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Testing the API
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flauqvlw5fie8li5drg8t.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flauqvlw5fie8li5drg8t.png" alt=" " width="800" height="331"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;With an average speed of around 5.81 seconds, this API may not be ideal for building a responsive rank-tracking tool.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fep0jfcfowrpebpefixd4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fep0jfcfowrpebpefixd4.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;However, its scalability makes it suitable for general SERP scraping tasks. The close is something on the higher end. So before committing to a paid plan its worth checking its alternatives. &lt;/p&gt;

&lt;h2&gt;
  
  
  SearchAPI
&lt;/h2&gt;

&lt;p&gt;SearchAPI provides a complete solution around Google. Offers a variety of scrapers, including a rank tracking API.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbjqitpbknho8422gtzii.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbjqitpbknho8422gtzii.png" alt=" " width="800" height="385"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Details
&lt;/h2&gt;

&lt;p&gt;Just like every other product, they also offer free credits for new signups.&lt;/p&gt;

&lt;p&gt;Per keyword tracking, the cost would start at $0.004 and go below $0.002 with a higher volume.&lt;/p&gt;

&lt;p&gt;The documentation is well-organized, and users can simply copy the code and run it directly in their development environment.&lt;/p&gt;

&lt;p&gt;You can contact them through chat or email.&lt;/p&gt;

&lt;h2&gt;
  
  
  Testing the API
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftg6dfh0ufu1lxenk2tro.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftg6dfh0ufu1lxenk2tro.png" alt=" " width="613" height="299"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Clocking in at an average of 8.87 seconds per request, this API isn’t winning any speed awards.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fm4ecf1iw7txib9dh5qv5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fm4ecf1iw7txib9dh5qv5.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Still, if you’re more focused on scale than speed, it can get the job done for basic SERP scraping.&lt;/p&gt;

&lt;h2&gt;
  
  
  Apyhub
&lt;/h2&gt;

&lt;p&gt;Apyhub is another rank-tracking API that offers great tools around SEO.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fnlvfj3jwxa2xqav34cti.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fnlvfj3jwxa2xqav34cti.png" alt=" " width="800" height="261"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Details
&lt;/h2&gt;

&lt;p&gt;On a new signup, you get very few free credits to test the API. I mean, you cannot even test the API completely. Around 5 API calls are free for a day.&lt;/p&gt;

&lt;p&gt;Finding the right API on the website is a challenge in itself. Documentation is not great.&lt;/p&gt;

&lt;p&gt;Pricing is not clear. So, cannot comment on that.&lt;/p&gt;

&lt;p&gt;Support does not work. Nobody responds.&lt;/p&gt;

&lt;h2&gt;
  
  
  Testing the API
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fo3dlr5x9xyaklonz042q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fo3dlr5x9xyaklonz042q.png" alt=" " width="632" height="302"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;With an average speed of 7.13 seconds and a success rate of 80%, this API might test your patience if you’re building a real-time rank tracker.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4s5xavxtuqdx9xyrk1fl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4s5xavxtuqdx9xyrk1fl.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That said, if you’re scraping SERP data in bulk, this API is a NO NO!&lt;/p&gt;

&lt;h2&gt;
  
  
  ScraperAPI
&lt;/h2&gt;

&lt;p&gt;ScraperAPI is an old player in the web scraping industry, and they also offer a SERP API for tracking the ranks of keywords.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fhx3gdj6o2c9p08c029pp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fhx3gdj6o2c9p08c029pp.png" alt=" " width="800" height="406"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Details
&lt;/h2&gt;

&lt;p&gt;Just like its competitors, it also offers free credits for testing the API.&lt;/p&gt;

&lt;p&gt;Per keyword tracking, the cost would start at $0.01225 and go below $0.002075 with a higher volume.&lt;/p&gt;

&lt;p&gt;Documentation is clear enough and can be easily integrated.&lt;/p&gt;

&lt;p&gt;Support is available, but you might have to wait a whole day to get your query resolved. They also do not offer instant chat support.&lt;/p&gt;

&lt;h2&gt;
  
  
  Testing the API
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkd1wzwx1rn9bzczxuuge.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkd1wzwx1rn9bzczxuuge.png" alt=" " width="638" height="302"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Testing this API was a rollercoaster — and not the fun kind. At one point, I was just hoping the program would finish. The fastest response I got was 8.32 seconds. One request even took 170 seconds (yes, you read that right).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fq3zahaou284k85mh7gqa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fq3zahaou284k85mh7gqa.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;With a success rate of 80%, I’m honestly not sure whether to laugh, cry, or just close the terminal and walk away.&lt;/p&gt;

&lt;p&gt;Read More: &lt;a href="https://www.scrapingdog.com/scraperapi-alternative/" rel="noopener noreferrer"&gt;Why Scrapingdog is a Better Altenative to ScraperAPI&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Which Rank Tracker API Should You Use?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fehjgrzjq98spquqaa9fe.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fehjgrzjq98spquqaa9fe.png" alt=" " width="736" height="229"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Every API might look the same from the top, but once you test them, you see the real strength of the product, and you can determine which one best fits your rank tracking mechanism.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flm290dkwdea00ii6kqsz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flm290dkwdea00ii6kqsz.png" alt=" " width="800" height="477"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Scrapingdog and Serpapi are clear winners when it comes to response time.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Floerpsgwt5rgzu0qambe.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Floerpsgwt5rgzu0qambe.png" alt=" " width="800" height="477"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Even if you look at the success rate offered by these APIs, you will reach the same conclusion. There are only two choices if you ignore the pricing. But if you consider the pricing as well, then Scrapingdog is worth every penny.&lt;/p&gt;

&lt;p&gt;You can integrate each of these tools or APIs into your digital marketing strategy to check keyword rankings, and each will work effectively.&lt;/p&gt;

&lt;p&gt;But if response time is something that you care about, pick APIs that have faster response times. &lt;/p&gt;

&lt;h2&gt;
  
  
  Frequently Asked Questions (FAQs)
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;How does a rank tracking API work?&lt;br&gt;
A rank tracking API sends a query to Google, fetches the search results, and returns ranking data in JSON format. You can then use fields like position to see where a website ranks for a target keyword.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Which rank tracking API was the fastest in this comparison?&lt;br&gt;
In this test, Scrapingdog was the fastest with an average response time of 1.31 seconds. SerpAPI came next at 2.49 seconds, while the other APIs were noticeably slower.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What factors were used to compare these rank tracking APIs?&lt;br&gt;
The APIs were compared on scalability, pricing, developer-friendliness, speed, and stability. These factors help show not just raw performance, but also how practical each API is for real SEO workflows.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Which rank tracking APIs performed best overall?&lt;br&gt;
Based on speed and success rate, Scrapingdog and SerpAPI were the top performers. If pricing is also considered, the blog concludes that Scrapingdog offers the best overall value.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

</description>
    </item>
    <item>
      <title>10 Best Serper Alternatives for Fast &amp; Reliable SERP APIs (2026)</title>
      <dc:creator>Darshan Khandelwal</dc:creator>
      <pubDate>Thu, 30 Jul 2026 07:46:49 +0000</pubDate>
      <link>https://dev.to/darshan_sd/10-best-serper-alternatives-for-fast-reliable-serp-apis-2026-3dm6</link>
      <guid>https://dev.to/darshan_sd/10-best-serper-alternatives-for-fast-reliable-serp-apis-2026-3dm6</guid>
      <description>&lt;p&gt;Back in 2023, when Serper.dev was launched, it soon became a major hotspot in the SERP API market. It is dead cheap, fast and flexible compared to any other options available in the market. However, if we look beyond organic search results, the API takes a complete U-turn and gets back behind its competitors.&lt;/p&gt;

&lt;p&gt;It roughly covers 12 Google APIs, and if your project needs richer SERP features like AI Overviews, Immersive Products, Short videos, Ads or anything beyond basic SERP, the API fails silently.&lt;/p&gt;

&lt;p&gt;We tested seven of the most popular Serper.dev alternatives in the market across speed, pricing, output richness, and AI readiness. Whether you’re building an AI monitoring tool, a rank tracker, or an SEO tool, this guide will tell you exactly which one deserves your API credits.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fg2rt7knki9sbnz7keopa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fg2rt7knki9sbnz7keopa.png" alt=" " width="739" height="558"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Developers are Moving Away From Serper.dev
&lt;/h2&gt;

&lt;p&gt;Serper.dev is indeed a great product, and there is a lot of positivity around it on X and LinkedIn by the developer community. However, some concerning points around it are making developers drift away from the product:&lt;/p&gt;

&lt;p&gt;Limited Engines and Scrapers Support — As we discussed above, Serper only covers 12 API Endpoints, including Google Search, Shopping, News, Images, Videos, Maps and a few others. If you need Baidu, DuckDuckGo, Bing, Amazon, and other search engines' support, you’ll have to look for another provider, which becomes a tedious task.&lt;/p&gt;

&lt;p&gt;Data Richness Gap — There is a huge gap between the data points offered by Serper and other enterprise data collectors. Various fields like AI Overviews, rich Knowledge Graph data, Inline and Short videos, and ads are missing from it.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to look for in a Serper.dev Alternative
&lt;/h2&gt;

&lt;p&gt;Before discussing the various providers, here are the points based on which we will be evaluating them:&lt;/p&gt;

&lt;p&gt;Pricing model: Monthly plans. Rollovers and credit expiry windows.&lt;/p&gt;

&lt;p&gt;Response time: Measured at p50 and p95.&lt;/p&gt;

&lt;p&gt;Output richness: Does it return PAA boxes, AI Overviews, sitelinks, discussions, shopping carousels, local packs, or just 10 blue links?&lt;/p&gt;

&lt;p&gt;AI-readiness: Can the output feed directly into an LLM pipeline? Structured JSON matters here.&lt;/p&gt;

&lt;p&gt;Multi-engine support: Google-only vs. Bing, Baidu, YouTube, and others.&lt;/p&gt;

&lt;p&gt;Reliability at scale: Uptime, rate limits, and how the API behaves under concurrency.&lt;/p&gt;

&lt;p&gt;Support: Response time, documentation quality, and whether there’s a human on the other end.&lt;/p&gt;

&lt;p&gt;Note: We will be comparing the products based on Google Advanced SERP UI, not the basic one, which can be accessed via the gbv=1 parameter.&lt;/p&gt;

&lt;h2&gt;
  
  
  Scrapingdog
&lt;/h2&gt;

&lt;p&gt;Starting price: ~$40/month for 20,000 Google SERP API calls.&lt;br&gt;
Free tier: 200 credits on signup&lt;br&gt;
Best for: Teams that need value at scale + a wide API surface area&lt;/p&gt;

&lt;p&gt;Scrapingdog started as a dedicated general web scraping company that later added &lt;a href="https://www.scrapingdog.com/google-serp-api/" rel="noopener noreferrer"&gt;Google SERP APIs&lt;/a&gt; on top of its robust infrastructure.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fohe46z4kspi3fk7fukrg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fohe46z4kspi3fk7fukrg.png" alt=" " width="720" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So, basically Scrapingdog does not just acts as a Google SERP provider but also supports a two-step workflow in which you can seamlessly extract content inside those links appearing in the search results through its Web Scraping API providing it a great leverage to offer all the data under one hood avoiding developers to use multiple providers for search and scraping services which can result in waste of time and resources.&lt;/p&gt;

&lt;p&gt;Scrapingdog’s multi-engine capability is not only backed by its large portfolio of &lt;a href="https://www.scrapingdog.com/google-apis/" rel="noopener noreferrer"&gt;Google Search APIs&lt;/a&gt;, which counts to twenty-seven (a huge number), but also supports other search engines like Baidu, Bing, Amazon, Walmart, and YouTube. If you’re running a search engine product or an SEO platform, the length and breadth of APIs alone save you from managing multiple accounts.&lt;/p&gt;
&lt;h2&gt;
  
  
  Pricing Breakdown:
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxon5qwev3xmu6uedr3dt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxon5qwev3xmu6uedr3dt.png" alt=" " width="741" height="157"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;No credit expiry on PAYG top-ups. If your volume fluctuates, you’re not burning credits you didn’t use.&lt;/p&gt;
&lt;h2&gt;
  
  
  Performance (Tested on 250 concurrency):
&lt;/h2&gt;

&lt;p&gt;Avg response time: 2.75s(mean), 2.71s (p50), ~3.23s (p95)&lt;/p&gt;

&lt;p&gt;Success rate: 100%&lt;/p&gt;

&lt;p&gt;Code example, migrating from Serper in a minute:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1# Serper.dev (old)2import requests3 4response = requests.post(5    "https://google.serper.dev/search",6    headers={"X-API-KEY": "YOUR_SERPER_KEY"},7    json={"q": "best web scraping API", "num": 10}8)9results = response.json()10 11# Scrapingdog (drop-in replacement)12response = requests.get(13    "https://api.scrapingdog.com/google",14    params={15        "api_key": "YOUR_SCRAPINGDOG_KEY",16        "query": "best web scraping API",17        "results": 10,18        "country": "us"19    }20)21results = response.json()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Dead Simple! Isn’t it? Plus, the response schemas are the same, so no need to check for different property names in the JSON.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why choose Scrapingdog over Serper.dev?
&lt;/h2&gt;

&lt;p&gt;As Serper.dev only supports the basic Google SERP, we will be comparing both the LITE and Advanced Google SERP API pricing of Scrapingdog with it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fb2gns57azrwocr4rqek3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fb2gns57azrwocr4rqek3.png" alt=" " width="744" height="223"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Serper vs Scrapingdog Advance Search Pricing Comparison&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqakrylp6sy6gkm8qaqhk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqakrylp6sy6gkm8qaqhk.png" alt=" " width="743" height="220"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Scrapingdog not only becomes a super economical alternative to Serper at scale in LITE Search, but also in advanced search, which is expensive to scrape.&lt;/p&gt;

&lt;p&gt;17+ Google endpoints plus multi search engine support vs. Serper’s ~12&lt;/p&gt;

&lt;p&gt;No credit expiry on pay-as-you-go credits&lt;/p&gt;

&lt;p&gt;Scrapingdog supports multiple featured snippets, including AI Overviews, Ads, and Knowledge Graph.&lt;/p&gt;

&lt;p&gt;Built on the same infrastructure that handles tens of millions of web scraping requests, so reliability at scale is proven.&lt;/p&gt;

&lt;p&gt;Human support response time under 5 minutes, clear and vast documentation make it a better choice.&lt;/p&gt;

&lt;p&gt;Note: You should also use the &lt;a href="https://www.scrapingdog.com/google-news-scraper-api/" rel="noopener noreferrer"&gt;Google News Scraping API&lt;/a&gt; to monitor your brand's mentions on the Internet.&lt;/p&gt;

&lt;h2&gt;
  
  
  SerpAPI
&lt;/h2&gt;

&lt;p&gt;Starting price: $75/month for 5,000 searches ($15/1K)&lt;br&gt;
Free tier: 100 searches/month&lt;br&gt;
Best for: Enterprise teams that need legal coverage, multi-engine support, and maximum reliability&lt;/p&gt;

&lt;p&gt;SerpAPI is the most established player in this list. The product is consistently maintained by its dedicated engineers, documentation is clear and concise, and APIs deliver the most complete JSON output in the market.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flbcfsdu27jxsewuar7ps.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flbcfsdu27jxsewuar7ps.png" alt=" " width="720" height="400"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  What makes them unique:
&lt;/h2&gt;

&lt;p&gt;Legal US Shield: For plans above the “Developer” tier, SerpAPI provides a legal cover for scraping search results as long as you use it for ethical purposes.&lt;/p&gt;

&lt;p&gt;Huge Portfolio: SerpAPI definitely holds the title for having the most search engine APIs in the industry. From Google to Yandex, from Amazon to Walmart, it literally covers every major search engine on the planet.&lt;/p&gt;

&lt;p&gt;Open Status Pages: SerpAPI has status pages that consist of average speed and success rate for every API it supports on its platform.&lt;/p&gt;
&lt;h2&gt;
  
  
  Pricing Breakdown:
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7qhbz04e7niszvsqs1hv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7qhbz04e7niszvsqs1hv.png" alt=" " width="741" height="199"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Pricing can be brutal not only for developers but also for medium-sized enterprises. However, if you have an enterprise-level volume, then SerpAPI can be the best option for you.&lt;/p&gt;
&lt;h2&gt;
  
  
  Performance:
&lt;/h2&gt;

&lt;p&gt;Avg response time: 4.83s(mean)&lt;/p&gt;

&lt;p&gt;Success rate: 100%&lt;/p&gt;
&lt;h2&gt;
  
  
  When to choose SerpAPI over Serper.dev:
&lt;/h2&gt;

&lt;p&gt;You need advanced featured snippets from search engines.&lt;/p&gt;

&lt;p&gt;You need all of the major search engines under one roof.&lt;/p&gt;

&lt;p&gt;You’re building an enterprise SaaS where support SLA matters.&lt;/p&gt;

&lt;p&gt;You need clear and concise documentation with dedicated engineers' support that can reply within 5 minutes.&lt;/p&gt;
&lt;h2&gt;
  
  
  SearchAPI
&lt;/h2&gt;

&lt;p&gt;Starting price: ~$40/month for 10,000 searches&lt;br&gt;
Free tier: 100 searches&lt;/p&gt;

&lt;p&gt;A relative newcomer, but it has a strong reputation backed by its great performance and consistent maintenance of its data pipeline. It is positioned somewhere between Scrapingdog and SerpAPI in the enterprise pricing level set.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6u83qldqnapbq9qh6391.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6u83qldqnapbq9qh6391.png" alt=" " width="720" height="399"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  What stands out:
&lt;/h2&gt;

&lt;p&gt;Covers structured JSON APIs across all Google endpoints.&lt;/p&gt;

&lt;p&gt;Solid documentation with code examples in Python, Node.js, Ruby, PHP, and Go.&lt;/p&gt;

&lt;p&gt;Cleaner logs consisting of all the needed information about the API call.&lt;/p&gt;
&lt;h2&gt;
  
  
  Pricing Breakdown:
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fshc9vyk46aow59m12d4m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fshc9vyk46aow59m12d4m.png" alt=" " width="746" height="197"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Performance:
&lt;/h2&gt;

&lt;p&gt;Avg response time: 2.9s(mean)&lt;/p&gt;

&lt;p&gt;Success rate: 100%&lt;/p&gt;
&lt;h2&gt;
  
  
  When to choose SearchAPI over Serper.dev:
&lt;/h2&gt;

&lt;p&gt;You need dedicated APIs related to Google AI Pages.&lt;/p&gt;

&lt;p&gt;You want to track ads, citations, sponsored products and various other snippets, which Serper doesn’t yet support.&lt;/p&gt;

&lt;p&gt;You need fast support as you can’t tolerate inconsistency with real users in production.&lt;/p&gt;
&lt;h2&gt;
  
  
  DataForSEO
&lt;/h2&gt;

&lt;p&gt;Starting price: $600 per 1M searches (async queue)&lt;br&gt;
Best for: SEO platforms, rank trackers, agencies doing bulk keyword research&lt;/p&gt;

&lt;p&gt;DataForSEO is infrastructurally different from the others on this list. It not only offers a simple synchronous API that returns results in 2–5 seconds, but it also operates a task-based async model in which you just have to submit a batch of queries, and results will be ready in a queue, sometimes in minutes, sometimes longer, depending on load.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxhgrs0yscps0pgd7mn1h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxhgrs0yscps0pgd7mn1h.png" alt=" " width="720" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That may sound like a downside if you are running a live application, but for SEO teams running bulk rank tracking jobs or keyword research, it’s actually a feature. You don’t need real-time results for a 50,000 keyword crawl. You need low cost and high throughput.&lt;/p&gt;
&lt;h2&gt;
  
  
  Key differentiators:
&lt;/h2&gt;

&lt;p&gt;Cheapest cost per query at scale: ~$0.60/1K on Standard Queue, as low as $0.006/1K on Sandbox. For bulk workflows, nothing beats this.&lt;/p&gt;

&lt;p&gt;SERP + keyword + backlink data: DataForSEO isn’t just a SERP API; it has endpoints for keyword difficulty, search volume, backlink indexes, and more. If you’re building an SEO platform, this is a one-stop shop.&lt;/p&gt;

&lt;p&gt;White-label friendly: Clean data model that’s easy to pipe into your own dashboard or product.&lt;/p&gt;
&lt;h2&gt;
  
  
  Pricing Breakdown:
&lt;/h2&gt;

&lt;p&gt;The pricing changes on the basis of the API Mode:&lt;/p&gt;

&lt;p&gt;For the Standard queue, it costs $0.0006 per SERP, and the cost per 1M is $600.&lt;/p&gt;

&lt;p&gt;For the Priority queue, it costs $0.0012 per SERP, and the cost per 1M is 1200$.&lt;/p&gt;

&lt;p&gt;For LIVE mode, it costs $0.002 per SERP, and the cost per 1M is 2000$.&lt;/p&gt;
&lt;h2&gt;
  
  
  Performance:
&lt;/h2&gt;

&lt;p&gt;We couldn’t test the API due to too much complex documentation.&lt;/p&gt;

&lt;p&gt;When to choose DataForSEO over Serper.dev:&lt;br&gt;
You run bulk/batch SEO workflows, not real-time queries.&lt;/p&gt;

&lt;p&gt;You’re building an SEO product and need keyword and backlink data alongside SERP.&lt;/p&gt;

&lt;p&gt;Volume is high (1M+ searches/month), and cost is the primary constraint.&lt;/p&gt;

&lt;p&gt;Real-time response time is not critical.&lt;/p&gt;
&lt;h2&gt;
  
  
  Exa &amp;amp; Tavily — Best for AI-Native Workflows
&lt;/h2&gt;

&lt;p&gt;Exa starting price: ~$5/1K queries (content search)&lt;br&gt;
Tavily starting price: ~$3/1K queries&lt;br&gt;
Best for: LLM agents, RAG pipelines, AI research tools&lt;/p&gt;

&lt;p&gt;These two products deserve a different section altogether because they’re solving a different problem than the rest of this list fundamentally. They’re not really SERP APIs. They’re AI-native search APIs built specifically for LLM workflows.&lt;/p&gt;

&lt;p&gt;Exa uses neural search trained on link prediction to find content by meaning, not just keywords. When you query Exa, you get not only 10–100 links just like other search engines, but also full page content of these links extracted in clean markdown, ready to drop into an LLM prompt without any additional scraping step.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcq2ww931ft4vyu9r0vqn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcq2ww931ft4vyu9r0vqn.png" alt=" " width="720" height="399"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Tavily is similar but focused on citation-ready results. It’s deeply integrated with LangChain and LlamaIndex, which is why it’s become the default search tool for many AI agent frameworks.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fl69maz60ph11b069b37a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fl69maz60ph11b069b37a.png" alt=" " width="720" height="399"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  The critical difference from SERP APIs:
&lt;/h2&gt;

&lt;p&gt;A traditional SERP API (Serper, Scrapingdog, SerpAPI) returns metadata about search results, titles, URLs, snippets, and knowledge graph data. To get the actual page content, you need a separate scraping step.&lt;/p&gt;

&lt;p&gt;Exa and Tavily return the content itself, full text, structured for LLM consumption. That’s why they’re in a different category.&lt;/p&gt;
&lt;h2&gt;
  
  
  When to choose Exa/Tavily over Serper.dev:
&lt;/h2&gt;

&lt;p&gt;You’re building LLM agents or RAG pipelines and need page content, not just metadata&lt;/p&gt;

&lt;p&gt;You’re using LangChain, LlamaIndex, or similar AI frameworks&lt;/p&gt;

&lt;p&gt;Search freshness is secondary to content quality for your use case&lt;/p&gt;
&lt;h2&gt;
  
  
  Head-to-Head: Scrapingdog vs. Serper.dev
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3xdntx9aix0hfqqa29pc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3xdntx9aix0hfqqa29pc.png" alt=" " width="740" height="488"&gt;&lt;/a&gt;&lt;br&gt;
The pricing gap widens significantly at scale. At 1M searches/month, Serper charges ~$700 per month. Scrapingdog’s equivalent cost for the same job is ~330$.&lt;/p&gt;
&lt;h2&gt;
  
  
  Response schema comparison:
&lt;/h2&gt;

&lt;p&gt;Both APIs return JSON. Here’s a simplified side-by-side of a Google SERP response:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1// Serper.dev response (simplified)2{3  "organic": [4    { "title": "...", "link": "...", "snippet": "...", "position": 1 }5  ],6  "peopleAlsoAsk": [...],7  "relatedSearches": [...]8}9 10// Scrapingdog response (simplified)11{12  "organic_data": [13    { "title": "...", "link": "...", "snippet": "...", "displayed_link": "...", "position": 1 }14  ],15  "peopleAlsoAsk": [...],16  "related_searches": [...],17  "ai_overview": { "text_blocks": "...", "sources": [...] },18  "knowledge_graph": {...}19}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The structure is similar enough that migration is minimal. Scrapingdog’s response includes additional fields like displayed_link, ai_overview, and knowledge_graph that gives your pipeline more data to work with.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to Migrate from Serper.dev to Scrapingdog (Step by Step)
&lt;/h2&gt;

&lt;p&gt;If you’re ready to switch, here’s the complete migration path:&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Get your Scrapingdog API key
&lt;/h2&gt;

&lt;p&gt;Sign up at scrapingdog.com, and you’ll get 200 free credits immediately, no credit card required.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Update your endpoint and parameters
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1# Python example2 3import requests4 5# Old Serper.dev code6def search_serper(query):7    response = requests.post(8        "https://google.serper.dev/search",9        headers={"X-API-KEY": "SERPER_KEY"},10        json={"q": query, "num": 10, "gl": "us", "hl": "en"}11    )12    return response.json()13 14# New Scrapingdog code15def search_scrapingdog(query):16    response = requests.get(17        "https://api.scrapingdog.com/google",18        params={19            "api_key": "YOUR_API_KEY",20            "query": query,21            "results": 10,22            "country": "us",23            "language": "en"24        }25    )26    return response.json()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1// Node.js example2 3// Old: Serper.dev4const searchSerper = async (query) =&amp;gt; {5  const res = await fetch("https://google.serper.dev/search", {6    method: "POST",7    headers: {8      "X-API-KEY": "SERPER_KEY",9      "Content-Type": "application/json"10    },11    body: JSON.stringify({ q: query })12  });13  return res.json();14};15 16// New: Scrapingdog17const searchScrapingdog = async (query) =&amp;gt; {18  const params = new URLSearchParams({19    api_key: "YOUR_API_KEY",20    query: query,21    results: 10,22    country: "us"23  });24  const res = await fetch(`https://api.scrapingdog.com/google?${params}`);25  return res.json();26};
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 3: Update your response parser
&lt;/h2&gt;

&lt;p&gt;Map the field names. Most are identical or near-identical:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fu27huc3xs4a0zak20dze.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fu27huc3xs4a0zak20dze.png" alt=" " width="742" height="316"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4: Run parallel for one week
&lt;/h2&gt;

&lt;p&gt;Keep both integrations live. Run the same queries through both and compare outputs. Once you’re satisfied, cut over completely.&lt;/p&gt;

&lt;h2&gt;
  
  
  Frequently Asked Question
&lt;/h2&gt;

&lt;p&gt;Is there a free alternative to Serper.dev?&lt;br&gt;
Yes. Scrapingdog offers 200 free credits on signup. SerpAPI gives 100 searches/month. Serper itself offers 2,500 free searches/month, which is the most generous free tier in the list. For completely free options, you’re looking at open-source DIY approaches (Scrapy + proxies), which work but require significant maintenance.&lt;/p&gt;

&lt;p&gt;What is the cheapest alternative to Serper.dev at scale?&lt;br&gt;
At 100K+ searches/month, Scrapingdog and DataForSEO are the cheapest options. Scrapingdog costs around $0.25–0.30 per 1K searches at high volume. DataForSEO’s async Standard Queue can go even lower for bulk non-realtime workloads.&lt;/p&gt;

&lt;p&gt;Does Scrapingdog support the same endpoints as Serper.dev?&lt;br&gt;
Yes, and it also supports other endpoints as well. Everything Serper covers (web, news, images, shopping, maps, scholar) is available in Scrapingdog, plus Bing, Baidu, Google AI Overview, Google AI Mode, Google Trends, Google Finance, Google Patents, and more.&lt;/p&gt;

&lt;p&gt;Is Serper.dev good for AI agents?&lt;br&gt;
It works, but it’s not built for it. Serper returns search metadata titles, snippets, URLs. For AI agents that need actual page content in LLM-ready format, you still need a separate scraping step. If your use case is LLM-native, look at Exa or Tavily. If you want SERP data + the option to also scrape full pages under one API, Scrapingdog’s Data Extraction API handles both.&lt;/p&gt;

&lt;p&gt;Does Serper.dev have an uptime SLA?&lt;br&gt;
Serper doesn’t publish a formal uptime SLA. SerpAPI and SearchAPI both publish uptime stats. Scrapingdog maintains a status page at status.scrapingdog.com.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Serper.dev is a solid tool; we’re not here to trash it. But the limited endpoint coverage and no multi-engine support make it a poor fit for teams that are scaling beyond a prototype.&lt;/p&gt;

&lt;p&gt;If you’re evaluating alternatives in 2026, the decision mostly comes down to three questions:&lt;/p&gt;

&lt;p&gt;How much volume do you need? Low volume → Serper. High volume → Scrapingdog, DataForSEO, SearchAPI and SerpAPI.&lt;/p&gt;

&lt;p&gt;Do you need fast results? Yes → Scrapingdog, Serper.&lt;/p&gt;

&lt;p&gt;Are you building for LLMs specifically? SERP metadata → Scrapingdog. Full content extraction → Exa or Tavily.&lt;/p&gt;

&lt;p&gt;For the majority of developers who are building LLMs, rank trackers and SEO tools, Scrapingdog delivers the best combination of price, endpoint breadth, and reliability at any volume tier.&lt;/p&gt;

&lt;p&gt;You can test it for free with 200 credits at scrapingdog.com — no credit card required.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>5 Best LinkedIn Scraping Tools (Ranked) by Scalability, Data Quality, and Pricing</title>
      <dc:creator>Darshan Khandelwal</dc:creator>
      <pubDate>Wed, 29 Jul 2026 13:33:01 +0000</pubDate>
      <link>https://dev.to/darshan_sd/5-best-linkedin-scraping-tools-ranked-by-scalability-data-quality-and-pricing-50ld</link>
      <guid>https://dev.to/darshan_sd/5-best-linkedin-scraping-tools-ranked-by-scalability-data-quality-and-pricing-50ld</guid>
      <description>&lt;p&gt;LinkedIn Scrapers are quite in demand in 2026. LinkedIn has the largest pool of corporates available today.&lt;/p&gt;

&lt;p&gt;So obviously, you can find many people on this platform who could have the same interests as yours. But websites like LinkedIn can serve you with data that can be used for selling goods and products.&lt;/p&gt;

&lt;p&gt;LinkedIn has more than &lt;a href="https://www.demandsage.com/linkedin-statistics/" rel="noopener noreferrer"&gt;800 million active users&lt;/a&gt; where people share their work experience, skills, and achievements daily. If you scrape and use this data wisely then you can generate a lot of &lt;a href="https://profiletree.com/linkedin-social-selling-index/" rel="noopener noreferrer"&gt;leads for your business&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Of course, this data can also be used for other purposes like finding the right candidate for the job or maybe enriching your own CRM.&lt;/p&gt;

&lt;p&gt;In this article, we will talk about the best LinkedIn scrapers in the market. Using these scrapers you can scrape Linkedin at scale.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quick Comparison of Best LinkedIn Scraping Tools
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqp6cah0kaevoj2svb0pc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqp6cah0kaevoj2svb0pc.png" alt=" " width="741" height="576"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Advantages of using LinkedIn Scrapers Instead of Collecting Data Manually
&lt;/h2&gt;

&lt;p&gt;You will always stay anonymous. On each request, a new IP will be used to scrape a page. Your IP will always be hidden.&lt;/p&gt;

&lt;p&gt;The pricing will be less as compared to the official API.&lt;/p&gt;

&lt;p&gt;You can get parsed JSON as the output.&lt;/p&gt;

&lt;p&gt;3rd Party APIs can be customized according to demands.&lt;/p&gt;

&lt;p&gt;24*7 support is available with many of them.&lt;/p&gt;

&lt;h2&gt;
  
  
  Some Challenges of Scraping LinkedIn at Scale
&lt;/h2&gt;

&lt;p&gt;If you have researched enough, you must by now know that there are tools with which you can scrape a few hundred profiles/jobs without any problem.&lt;/p&gt;

&lt;p&gt;These tools either use your LinkedIn Profile/LinkedIn Sales Navigator which makes them limited in terms of their abilities to extract data.&lt;/p&gt;

&lt;p&gt;The main problem arises when you scrape LinkedIn at scale. Some of them are ⬇️&lt;/p&gt;

&lt;p&gt;Legal and Ethical Issues:&lt;/p&gt;

&lt;p&gt;User Agreement Violation: LinkedIn’s terms of service prohibit the scraping of their website. Engaging in this activity can result in legal action against the perpetrators.&lt;/p&gt;

&lt;p&gt;Privacy Concerns: Extracting user data without consent violates privacy norms and can lead to severe repercussions. I have discussed in detail about the legality of scraping LinkedIn in this blog.&lt;/p&gt;

&lt;p&gt;Technical Challenges:&lt;/p&gt;

&lt;p&gt;Rate Limits: LinkedIn monitors and restricts frequent and massive data requests. An IP address can be temporarily banned if it makes too many requests in a short period.&lt;/p&gt;

&lt;p&gt;Dynamic Content Loading: LinkedIn uses AJAX and infinite scrolling to load content dynamically. Traditional scraping methods often fail to capture this kind of content.&lt;/p&gt;

&lt;p&gt;Complex Website Structure: LinkedIn’s DOM structure is intricate, and elements might not have consistent class or ID names. This can make the scraping process unstable.&lt;/p&gt;

&lt;p&gt;Captchas: LinkedIn employs captchas to deter automated bots, making scraping even more challenging.&lt;/p&gt;

&lt;p&gt;Cookies and Sessions: Managing sessions and cookies is necessary to mimic a real user browsing pattern and avoid detection.&lt;/p&gt;

&lt;p&gt;Maintenance Issues:&lt;/p&gt;

&lt;p&gt;Frequent Changes: LinkedIn, like other modern web platforms, frequently changes its user interface and underlying code. This means scrapers need constant updating to remain functional.&lt;/p&gt;

&lt;p&gt;Data Quality: Ensuring the scraped data’s accuracy, relevancy, and completeness can be challenging, especially at scale.&lt;/p&gt;

&lt;p&gt;Infrastructure and Costs:&lt;/p&gt;

&lt;p&gt;Large-scale Scraping: Scraping at scale requires a distributed system, proxy networks, and cloud infrastructure, increasing the complexity and costs.&lt;/p&gt;

&lt;p&gt;Data Storage: Storing vast amounts of scraped data efficiently and securely is another challenge.&lt;/p&gt;

&lt;p&gt;Anti-Scraping Mechanisms:&lt;/p&gt;

&lt;p&gt;Sophisticated Detection: LinkedIn employs sophisticated bot detection mechanisms. Mimicking human-like behavior becomes essential to avoid detection.&lt;/p&gt;

&lt;p&gt;Continuous Monitoring: LinkedIn monitors for suspicious activities and can block accounts or IP addresses even if you successfully scrape data.&lt;/p&gt;

&lt;h2&gt;
  
  
  Advantages of using LinkedIn Scrapers Instead of Collecting Data Manually
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;- You will always stay anonymous. A new IP will be used on each request to scrape a page. Your IP will always be hidden.&lt;/li&gt;
&lt;li&gt;- The pricing will be lower than the official API.&lt;/li&gt;
&lt;li&gt;- You can get parsed JSON as the output.&lt;/li&gt;
&lt;li&gt;- 3rd Party APIs can be customized according to demands.&lt;/li&gt;
&lt;li&gt;- 24*7 support is available.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Best LinkedIn Scrapers [In 2026]
&lt;/h2&gt;

&lt;p&gt;We will be judging these LinkedIn lead Scraper APIs based on 5 attributes.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Scalability means how many pages you can scrape in a day.&lt;/li&gt;
&lt;li&gt;
&lt;/li&gt;
&lt;li&gt;Pricing of the API. What is the cost of one API call?&lt;/li&gt;
&lt;li&gt;
&lt;/li&gt;
&lt;li&gt;Developer-friendly refers to the ease with which a software engineer can use the service.&lt;/li&gt;
&lt;li&gt;
&lt;/li&gt;
&lt;li&gt;Stability refers to how much load a service can handle or for how long the service is in the market.&lt;/li&gt;
&lt;li&gt;
&lt;/li&gt;
&lt;li&gt;Data Quality refers to how old the data is.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  EnrichmentAPI
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fq9nl044eha7wetyjmnpt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fq9nl044eha7wetyjmnpt.png" alt=" " width="720" height="322"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;EnrichmentAPI offers a scalable solution for collecting public profile data. They also offer a reverse contact API, a company enrichment API, an email finder API, an email verification API, etc.&lt;/p&gt;

&lt;p&gt;Scalability&lt;/p&gt;

&lt;p&gt;You can pull data of millions of profiles in a day with this API. We have tested this, and we pulled around 1.8M profiles in a day with all the details like experience, skills, education, etc.&lt;/p&gt;

&lt;p&gt;Pricing&lt;/p&gt;

&lt;p&gt;They offer a free plan to test the API. On signup, you get 20 credits. Other than that, their smallest plan starts from $49/month, in which you can easily enrich around 1500 profiles.&lt;/p&gt;

&lt;p&gt;Developer Friendly&lt;br&gt;
Documentation is very clear, and any developer can integrate the APIs easily. You get instant chat support too through a chat widget or email.&lt;/p&gt;

&lt;p&gt;Stability&lt;br&gt;
EnrichmentAPI has been in the market for like 3 years. They have been providing the enrichment data consistently helping many CRM and AI companies to collect people data at scale.&lt;/p&gt;

&lt;p&gt;Data Quality&lt;br&gt;
You will get fresh data on every API call.&lt;/p&gt;

&lt;h2&gt;
  
  
  Scrapingdog’s LinkedIn Scraper API
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fffv29l7bfxgnx103qn54.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fffv29l7bfxgnx103qn54.png" alt=" " width="800" height="453"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Scrapingdog offers a simple and easy-to-use LinkedIn Scraper API.&lt;/p&gt;

&lt;p&gt;This API can be used to scrape either a person’s profile or a company profile. Other than this Scrapingdog offers LinkedIn Jobs scraper to scrape job data from this platform.&lt;/p&gt;

&lt;p&gt;Scalability&lt;/p&gt;

&lt;p&gt;Well, you can scrape around 1 million profiles from Scrapingdog’s LinkedIn Scraping API be it job data or profile data.&lt;/p&gt;

&lt;p&gt;Pricing&lt;/p&gt;

&lt;p&gt;The enterprise pack will cost $1k per month and you can scrape 110k profiles. Each profile will cost $0.009.&lt;/p&gt;

&lt;p&gt;Developer Friendly&lt;/p&gt;

&lt;p&gt;The documentation is self-explanatory and the user can test the API directly from the dashboard without setting up any coding environment.&lt;/p&gt;

&lt;p&gt;Stability&lt;/p&gt;

&lt;p&gt;Scrapingdog has been in the market for 5 years now and has more than 200 users which proves its stability in scraping LinkedIn at scale.&lt;/p&gt;

&lt;p&gt;Data Quality&lt;/p&gt;

&lt;p&gt;We always scrape fresh data.&lt;/p&gt;

&lt;h2&gt;
  
  
  Brightdata LinkedIn Scraper
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fp3bw7et537jss4yi90gk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fp3bw7et537jss4yi90gk.png" alt=" " width="800" height="285"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Brightdata, along with its large proxy network also provides LinkedIn Scrapers.&lt;/p&gt;

&lt;p&gt;Scalability&lt;/p&gt;

&lt;p&gt;Their scalability is great but the error rate might go up due to disturbances in their proxy pool. Bright data goes down frequently.&lt;/p&gt;

&lt;p&gt;Pricing&lt;/p&gt;

&lt;p&gt;Their solution could be a little expensive. The per-profile cost is around $0.05.&lt;/p&gt;

&lt;p&gt;Developer Friendly&lt;/p&gt;

&lt;p&gt;The whole documentation is quite easy to read and there are request builders which can help you get started quickly.&lt;/p&gt;

&lt;p&gt;Stability&lt;/p&gt;

&lt;p&gt;No doubt Brightdata has the biggest proxy pool in the market but they frequently go down sometimes. But overall their infrastructure is quite solid.&lt;/p&gt;

&lt;p&gt;Data Quality&lt;/p&gt;

&lt;p&gt;They do scrape fresh data like Scrapingdog.&lt;/p&gt;

&lt;p&gt;Read More: 5 Best Bright Data Alternatives for Web Scraping&lt;/p&gt;

&lt;h2&gt;
  
  
  People Data Labs
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3qgpounpijh3i097cwle.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3qgpounpijh3i097cwle.png" alt=" " width="800" height="248"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;PDL provides data enrichment technology. You can use their APIs to find valuable insights for any prospect.&lt;/p&gt;

&lt;p&gt;Scalability&lt;/p&gt;

&lt;p&gt;PDL is designed for small projects. You cannot scrape thousands of profiles with it in a short time frame. So, the scalability is not great.&lt;/p&gt;

&lt;p&gt;Pricing&lt;/p&gt;

&lt;p&gt;It will cost you $0.28 per profile. This makes them very very costly.&lt;/p&gt;

&lt;p&gt;Developer Friendly&lt;/p&gt;

&lt;p&gt;The documentation is nice which makes them developer-friendly.&lt;/p&gt;

&lt;p&gt;Stability&lt;br&gt;
If you are ok with old data then it is stable.&lt;/p&gt;

&lt;p&gt;Data Quality&lt;/p&gt;

&lt;p&gt;The data you get will be from an old database because they don’t scrape it fresh. They have data sources that they renew at regular intervals.&lt;/p&gt;

&lt;h2&gt;
  
  
  Apify
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fhqnmimifw03b23mscojt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fhqnmimifw03b23mscojt.png" alt=" " width="800" height="376"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Apify is another great LinkedIn scraper. You can scrape person’s profile as well as the company profile.&lt;/p&gt;

&lt;p&gt;Scalability&lt;/p&gt;

&lt;p&gt;Their API only works if you pass cookies from your logged-in LinkedIn account. So, if you pass cookies from a normal account, you will be able to scrape a maximum of 50 profiles, and if you are passing cookies from a premium account, you will scrape a maximum of 500 profiles. Once you reach these limits your account will be banned by Linkedin and logged out of your account.&lt;/p&gt;

&lt;p&gt;So, Apify is for those who just want to scrape a very small number of profiles.&lt;/p&gt;

&lt;p&gt;Pricing&lt;/p&gt;

&lt;p&gt;They provide a 3-day free trial after that they charge $25 per month.&lt;/p&gt;

&lt;p&gt;Developer Friendly&lt;/p&gt;

&lt;p&gt;Documentation is very clear and whether you are a developer or a non-developer you will be able to scrape profiles using Apify. It provides a hook through which you can scrape profiles using make.com.&lt;/p&gt;

&lt;p&gt;Stability&lt;/p&gt;

&lt;p&gt;Service is completely stable and you can scrape a small number of profiles very easily without getting blocked.&lt;/p&gt;

&lt;p&gt;Data Quality&lt;/p&gt;

&lt;p&gt;You will always get fresh data from their API. Since you are passing the cookies then you will get data like skills, history, etc which are absent in almost all the other scrapers.&lt;/p&gt;

&lt;h2&gt;
  
  
  Skrapp.io’s LinkedIn Extension
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fepz0o05y7r9bwhp7sa5m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fepz0o05y7r9bwhp7sa5m.png" alt=" " width="800" height="525"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Wanted to mention this particular product as a special mention in this article. They aren't a dedicated LinkedIn Scraper, but a service that can be used on top of it.&lt;/p&gt;

&lt;p&gt;Skrapp.io focuses on email finding and data enrichment from LinkedIn profiles. They specialize in extracting verified business emails rather than comprehensive profile scraping.&lt;/p&gt;

&lt;p&gt;Scalability&lt;/p&gt;

&lt;p&gt;Skrapp.io is designed for moderate-scale email extraction. With their Professional plan, you get 10,000 email credits per month, and their Enterprise plan offers 25,000 credits monthly. Each credit allows you to find one verified email address, making it suitable for targeted email campaigns rather than mass profile scraping.&lt;/p&gt;

&lt;p&gt;Pricing&lt;/p&gt;

&lt;p&gt;Professional plan costs $37/month (billed annually) for 10,000 email credits, making each verified email cost approximately $0.0037. Enterprise plan costs $75/month (billed annually) for 25,000 credits, bringing the cost down to $0.003 per email. They also offer a free plan with limited credits.&lt;/p&gt;

&lt;p&gt;Developer Friendly&lt;/p&gt;

&lt;p&gt;Skrapp.io offers browser extensions for LinkedIn, Sales Navigator, and LinkedIn Recruiter, making it accessible for non-developers. They also provide API integrations for Enterprise users. The platform is user-friendly with clear documentation and multiple export options.&lt;/p&gt;

&lt;p&gt;Stability&lt;/p&gt;

&lt;p&gt;Skrapp.io has been serving over 2 million professionals and has established partnerships with major companies like Adobe, IBM, and Microsoft. Their service focuses on compliance, and they only charge for valid and catch-all emails, ensuring fair usage. The service is stable for email extraction purposes.&lt;/p&gt;

&lt;p&gt;Data Quality&lt;/p&gt;

&lt;p&gt;They provide real-time email verification with their integrated email verifier. The platform ensures high accuracy by only charging for deliverable emails marked as 'Valid' or 'Catch-all.' However, their focus is primarily on email data rather than comprehensive profile information.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Verdict
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fh45v69bfk17c6q1l90vc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fh45v69bfk17c6q1l90vc.png" alt=" " width="754" height="417"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We have compiled a report considering all the factors above. This report is the result of a comprehensive analysis of each API.&lt;/p&gt;

&lt;p&gt;Although they may appear similar at first glance, further testing reveals that only a small number of APIs (one or two) are stable and suitable for production purposes.&lt;/p&gt;

&lt;p&gt;Therefore, it is essential to evaluate the options based on your specific requirements and choose the most appropriate one from the given list.&lt;/p&gt;

&lt;p&gt;I hope this list and my testing will help you pick one of them. If you liked the article do consider sharing it. &lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ (Frequently Asked Questions)
&lt;/h2&gt;

&lt;p&gt;(1) What is the best LinkedIn data extractor tool?&lt;br&gt;
The best LinkedIn data extractor tool is one that can reliably collect profile, company, and job data at scale without requiring a logged-in account. API-based LinkedIn scrapers such as Scrapingdog, Bright Data are commonly preferred because they return structured data, handle dynamic LinkedIn pages, and help reduce blocking risks compared to browser extensions or manual scraping scripts.&lt;/p&gt;

&lt;p&gt;(2) What is the best LinkedIn scraper for lead generation?&lt;br&gt;
For lead generation, the best LinkedIn scraper is one that can extract key contact and professional details such as name, job title, company, industry, and profile URL. Tools that support bulk scraping, filters, and clean data output are ideal for sales teams and outreach campaigns.&lt;/p&gt;

&lt;p&gt;(3) Is it safe to scrape data from LinkedIn?&lt;br&gt;
Scraping LinkedIn is safer when only publicly available data is collected and scraping activity is kept within reasonable limits. Using tools with proxy rotation, rate limiting, and proper request handling helps reduce the risk of IP blocks while supporting more stable data extraction.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>3 Google Scholar APIs Worth Checking Out in 2026</title>
      <dc:creator>Darshan Khandelwal</dc:creator>
      <pubDate>Wed, 22 Jul 2026 07:18:49 +0000</pubDate>
      <link>https://dev.to/darshan_sd/3-google-scholar-apis-worth-checking-out-in-2026-21mh</link>
      <guid>https://dev.to/darshan_sd/3-google-scholar-apis-worth-checking-out-in-2026-21mh</guid>
      <description>&lt;h2&gt;
  
  
  Best Google Scholar API Comparison (2026)
&lt;/h2&gt;

&lt;p&gt;Below is a quick comparison of the best Google Scholar APIs tested in this article, based on success rate, speed, and reliability.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdtvhvy3f9vq16hxisf4a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdtvhvy3f9vq16hxisf4a.png" alt=" " width="742" height="181"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://scholar.google.com/" rel="noopener noreferrer"&gt;Google Scholar&lt;/a&gt; data can unlock a goldmine of academic insights.&lt;/p&gt;

&lt;p&gt;By analyzing this data, you can identify trending research topics, track citation growth over time, evaluate the impact of a paper or author, discover new publications in a specific field, or even map collaboration networks between researchers and institutions. For universities, it helps benchmark academic performance.&lt;/p&gt;

&lt;p&gt;For developers, it powers tools like reference managers, citation analyzers, and literature review platforms.&lt;/p&gt;

&lt;p&gt;Simply put, Scholar data helps you stay ahead in the research game, whether you’re publishing, studying, or building.&lt;/p&gt;

&lt;p&gt;A Google Scholar API allows you to programmatically access academic research data such as article titles, author names, abstracts, citation counts, publication dates, journals, and even related works — all without manually browsing through the website.&lt;/p&gt;

&lt;p&gt;It’s a game-changer for researchers, developers, and anyone who needs large volumes of scholarly information, including students managing assignments more efficiently. For those dealing with tight deadlines, some also explore options to do my homework more efficiently. Whether you’re building an academic search tool, analyzing trends in research papers, or simply pulling citation metrics for a report, a Google Scholar API helps you automate that process efficiently and at scale.&lt;/p&gt;

&lt;p&gt;In this article, we will test 3 of the best Google Scholar APIs and rank them based on their performances. This study will help you select the best option for your next project.&lt;/p&gt;

&lt;h2&gt;
  
  
  Criteria To Test These Google Scholar APIs
&lt;/h2&gt;

&lt;p&gt;Analysis will be made based on these five attributes.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fryj26vplbr3nj5kgv8ba.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fryj26vplbr3nj5kgv8ba.png" alt=" " width="485" height="331"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Scalability– Number of researches that can be scraped.&lt;/p&gt;

&lt;p&gt;Pricing– Per request cost.&lt;/p&gt;

&lt;p&gt;Developer-friendly– How easy is it for developers to integrate the API?&lt;/p&gt;

&lt;p&gt;Speed– How fast an API responds.&lt;/p&gt;

&lt;p&gt;Stability– Uptime of APIs.&lt;/p&gt;

&lt;p&gt;I will be using this Python code to test the APIs.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1import requests2import time3import random4 5 6# List of search terms7research_terms = [8    "cancer",9    "biology",10    "NLP Papers 2024",11    "machine learning in healthcare",12    "quantum computing applications"13]14 15# Replace with your actual API endpoint16# Make sure it includes {query} where the search term should be inserted17api_key="your-api-key"18base_url = "https://api.example.com/google_scholar"19#20 21 22 23 24 25total_requests = 1026success_count = 027total_time = 028 29for i in range(total_requests):30    try:31        search_term=random.choice(research_terms)32 33 34        params = {35  "engine": "google_scholar",36  "q": search_term,37  "api_key": api_key38}39 40 41 42        start_time = time.time()43        response = requests.get(base_url, params=params)44        end_time = time.time()45 46        request_time = end_time - start_time47        total_time += request_time48 49        if response.status_code == 200:50            success_count += 151        print(f"Request {i+1}: '{search_term}' took {request_time:.2f}s | Status: {response.status_code}")52 53    except Exception as e:54        print(f"Request {i+1} with '{search_term}' failed due to: {str(e)}")55 56# Final Stats57average_time = total_time / total_requests58success_rate = (success_count / total_requests) * 10059 60print(f"\n🔍 Total Requests: {total_requests}")61print(f"✅ Successful: {success_count}")62print(f"⏱️ Average Time: {average_time:.2f} seconds")63print(f"📊 Success Rate: {success_rate:.2f}%")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Scrapingdog Google Scholar API
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.scrapingdog.com/google-scholar-api/" rel="noopener noreferrer"&gt;Google Scholar API&lt;/a&gt; offered by Scrapingdog can be used for scraping Google Scholar data at scale. API will return structured JSON data, which will have all the basic details from the title to the link of the research.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fruwyk6mmkun8yohc532u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fruwyk6mmkun8yohc532u.png" alt=" " width="800" height="407"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Details
&lt;/h2&gt;

&lt;p&gt;You will get 1000 free credits on sign-up. You can use these credits to test the API completely before upgrading.&lt;/p&gt;

&lt;p&gt;The cost per API call starts at $0.001 and decreases to below $0.00029 as usage volume increases.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://docs.scrapingdog.com/google-scholar-api" rel="noopener noreferrer"&gt;documentation&lt;/a&gt; is very clear and provides ready-made code snippets. One can easily integrate the API by directly copying and pasting the code from the dashboard. We regularly post new articles and videos on YouTube.&lt;/p&gt;

&lt;p&gt;You can contact them through email or on-site chat support. They are available 24*7 and will reply to your query within seconds.&lt;/p&gt;

&lt;h2&gt;
  
  
  Testing the API
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1km4bovj071j2d8rz0jh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1km4bovj071j2d8rz0jh.png" alt=" " width="676" height="335"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We got amazing results.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftyrj7812mzxynbqs1d0y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftyrj7812mzxynbqs1d0y.png" alt=" " width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;With a 100% success rate and an average response time of just 1.26 seconds, Scrapingdog's Google Scholar API proves to be incredibly fast and reliable for scraping Scholar at scale.&lt;/p&gt;

&lt;h2&gt;
  
  
  SerpAPI
&lt;/h2&gt;

&lt;p&gt;SerpAPI also offers Google Scholar API, and I am sure you already know about them. API will return a beautiful, structured JSON response.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftb0xn9kekjf31wc743sl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftb0xn9kekjf31wc743sl.png" alt=" " width="800" height="314"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Details
&lt;/h2&gt;

&lt;p&gt;When you sign up, you get 100 credits for free. You can test any API before going for a bigger pack.&lt;/p&gt;

&lt;p&gt;Pricing for one API call starts from $0.015(15x of Scrapingdog😲&lt;strong&gt;)&lt;/strong&gt; and drops below $0.0075 with higher volume.&lt;/p&gt;

&lt;p&gt;The documentation is clear and concise. Any developer can integrate the API in no time.&lt;/p&gt;

&lt;p&gt;You can reach out to them through on-site chat support or through email. They have a great support team and will help you out with any query.&lt;/p&gt;

&lt;h2&gt;
  
  
  Testing the API
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fy9ym7katwzysbf2jg86p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fy9ym7katwzysbf2jg86p.png" alt=" " width="644" height="296"&gt;&lt;/a&gt;&lt;br&gt;
We got a 100% success rate with an average response time of 2.51 seconds.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvkr21r1zr8q0w6h9pg6q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvkr21r1zr8q0w6h9pg6q.png" alt=" " width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  SearchAPI
&lt;/h2&gt;

&lt;p&gt;SearchAPI is another choice if you are looking to scrape Google Scholar.&lt;/p&gt;

&lt;h2&gt;
  
  
  Details
&lt;/h2&gt;

&lt;p&gt;They provide 100 free credits for testing the API.&lt;/p&gt;

&lt;p&gt;Per API, call cost will start from $0.004(4x of Scrapingdog😲&lt;strong&gt;)&lt;/strong&gt; and drop below $0.002 with a higher volume.&lt;/p&gt;

&lt;p&gt;Any developer can easily integrate their APIs into their working environment.&lt;/p&gt;

&lt;p&gt;You can contact them through chat or email.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpo9crf63cohn7ass1iar.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpo9crf63cohn7ass1iar.png" alt=" " width="800" height="355"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Testing the API
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvhty3x4b0q4cr2tt4ye3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvhty3x4b0q4cr2tt4ye3.png" alt=" " width="635" height="288"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;SearchAPI also provided a 100% success rate with an average speed of 3.59 seconds.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcc94s2sgczqk2vk6tck2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcc94s2sgczqk2vk6tck2.png" alt=" " width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fif7xh1bx4i9vkrsa7bps.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fif7xh1bx4i9vkrsa7bps.png" alt=" " width="633" height="185"&gt;&lt;/a&gt;&lt;br&gt;
If you compare each API based on speed, the results will look like this.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F78891ynq1stxzljcgmrq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F78891ynq1stxzljcgmrq.png" alt=" " width="800" height="496"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here, it looks like Scrapingdog and SerpAPI can both be used for scraping Scholar data at scale. Now, let’s compare them based on pricing.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fc7r0h357ktem02tr9uop.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fc7r0h357ktem02tr9uop.png" alt=" " width="800" height="477"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here, things look very different. If you consider the price, then Scrapingdog becomes a clear choice.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ (Frequently Asked Questions)
&lt;/h2&gt;

&lt;h2&gt;
  
  
  1. What is a Google Scholar API, and what is it used for?
&lt;/h2&gt;

&lt;p&gt;A Google Scholar API allows you to extract research data like article titles, authors, abstracts, and citation counts. This data is commonly used for academic research, citation analysis, literature reviews, and building research tools.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Does Google Scholar have an official API?
&lt;/h2&gt;

&lt;p&gt;No, Google Scholar does not provide an official public API. This is why third-party Google Scholar APIs are commonly used to extract research data reliably.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. What factors should I consider when choosing a Google Scholar API?
&lt;/h2&gt;

&lt;p&gt;Key factors include data accuracy, success rate, ease of integration, pricing, and whether the API handles proxies and blocks automatically.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;What’s the best way to scrape Google Scholar search results?
The most reliable way is to use a dedicated Google Scholar API that manages proxies, rate limits, and anti-bot systems for you.&lt;/li&gt;
&lt;/ol&gt;

</description>
    </item>
    <item>
      <title>Best Oxylabs Alternatives in 2026: Features, Pricing &amp; Comparison</title>
      <dc:creator>Darshan Khandelwal</dc:creator>
      <pubDate>Wed, 15 Jul 2026 10:37:41 +0000</pubDate>
      <link>https://dev.to/darshan_sd/best-oxylabs-alternatives-in-2026-features-pricing-comparison-3a5a</link>
      <guid>https://dev.to/darshan_sd/best-oxylabs-alternatives-in-2026-features-pricing-comparison-3a5a</guid>
      <description>&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;p&gt;The best Oxylabs alternatives in 2026, compared by pricing, ease of use, and scalability, include:&lt;br&gt;
Scrapingdog – Best overall alternative with predictable credit-based pricing, dedicated scraping APIs, no KYC, and plans starting at $40/month.&lt;br&gt;
Bright Data – Enterprise-grade platform with the largest proxy network and the highest success rates, best suited for large-scale scraping.&lt;br&gt;
Decodo – Affordable residential proxy provider with no KYC, ideal for developers who want Oxylabs-quality proxies at a lower cost.&lt;br&gt;
ScraperAPI – Easy-to-use scraping API with transparent credit-based pricing, built-in proxy rotation, and JavaScript rendering.&lt;br&gt;
Zyte – Strong choice for Scrapy users with flexible pay-as-you-go pricing and managed anti-bot infrastructure.&lt;/p&gt;

&lt;p&gt;Looking for an alternative to Oxylabs for web scraping? In this article, I’ll show you 5 more affordable options, just as effective, and backed by support teams that actually reply.&lt;/p&gt;

&lt;p&gt;Before we compare the alternatives in detail, here's a quick overview of their pricing, billing models, KYC requirements, and ideal use cases.&lt;/p&gt;

&lt;h2&gt;
  
  
  Overall Comparison
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbev47nih2jqyw5s5pjmv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbev47nih2jqyw5s5pjmv.png" alt=" " width="800" height="478"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How We Evaluated These Oxylabs Alternatives
&lt;/h2&gt;

&lt;p&gt;To keep this comparison fair, we evaluated every provider using the same criteria: pricing, billing model, onboarding process, KYC requirements, dedicated scraping APIs, documentation quality, customer support, and overall value for developers and businesses. Pricing information was collected from each provider's publicly available plans as of mid-2026.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Look for an Oxylabs Alternative
&lt;/h2&gt;

&lt;p&gt;A few recurring complaints show up across independent reviews and buyer forums:&lt;/p&gt;

&lt;p&gt;KYC friction — Oxylabs requires identity verification for trials and several products, which can delay onboarding for individual developers.&lt;/p&gt;

&lt;p&gt;High minimums — Residential proxy traffic starts at $8/GB. That sounds fine until you do the math. A single Google page can run around 1MB, so 1GB burns through in just a few hundred calls.&lt;/p&gt;

&lt;p&gt;Enterprise-first support model — Great if you’re a mid-market or enterprise buyer with an account manager, less great if you just want a quick answer in a chat window. The support team is extremely unhelpful and takes several hours to respond. Many users have complained about the same issue in the reviews as well.&lt;/p&gt;

&lt;p&gt;Nine separate product lines — residential, datacenter, ISP, mobile, Web Scraper API, SERP API, Web Unblocker, and more, each with its own pricing model, which makes it genuinely hard to estimate a monthly bill upfront.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Makes a Good Oxylabs Alternative?
&lt;/h2&gt;

&lt;p&gt;Choosing a web scraping platform isn't just about finding the lowest price. A good Oxylabs alternative should offer reliable proxy infrastructure, transparent pricing, automatic CAPTCHA handling, JavaScript rendering, responsive customer support, and enough flexibility to scale from small projects to enterprise workloads. Depending on your use case, features like dedicated Google Search APIs, pay-as-you-go pricing, or residential proxies may matter more than having the largest proxy pool.&lt;/p&gt;

&lt;h2&gt;
  
  
  Scrapingdog
&lt;/h2&gt;

&lt;p&gt;Scrapingdog is a web scraping API that handles proxy rotation, headless browser rendering, and CAPTCHA solving behind a single endpoint, plus dedicated APIs for Google Search, Google Maps, Amazon, Walmart, LinkedIn, and more that return clean, parsed JSON instead of raw HTML.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F71zwulkg781faqxz0dpu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F71zwulkg781faqxz0dpu.png" alt=" " width="720" height="350"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Pros
&lt;/h2&gt;

&lt;p&gt;No KYC and no credit card required to try it. The free plan ships with 200 free credits.&lt;/p&gt;

&lt;p&gt;Paid plans start at $40/month for 200,000 credits, with a pay-as-you-go option (25,000 credits for $10, credits never expire) for irregular workloads.&lt;/p&gt;

&lt;p&gt;Every plan unlocks every API, there’s no feature-gating between tiers, only credits and concurrency.&lt;/p&gt;

&lt;p&gt;Failed or blocked requests are never charged.&lt;/p&gt;

&lt;p&gt;With 70+ dedicated APIs — Google SERP, Google Shopping, Amazon Product Scraper, Walmart, and more. You get purpose-built endpoints for nearly every major target, starting around $0.001 per request and dropping even lower at scale.&lt;/p&gt;

&lt;p&gt;Documentation includes code samples across most major languages, and support is available via chat without needing an account manager.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cons
&lt;/h2&gt;

&lt;p&gt;Some heavily protected or less common websites might not get scraped.&lt;/p&gt;

&lt;p&gt;No option to pick your own proxy location down to the city level.&lt;/p&gt;

&lt;p&gt;Best for: developers, small-to-mid-size and enterprise teams who want predictable credit-based pricing, dedicated scraper endpoints for popular targets, and zero onboarding friction.&lt;/p&gt;

&lt;h2&gt;
  
  
  Brightdata
&lt;/h2&gt;

&lt;p&gt;Bright Data is the largest commercial proxy network on the market, with a residential pool reported at around 400 million IPs across 195 countries. Alongside that, it offers a general Web Scraper API, SERP API, Web Unlocker, and ready-made datasets.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F39ouf0whjhfmy3o1o7e2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F39ouf0whjhfmy3o1o7e2.png" alt=" " width="720" height="376"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Pros
&lt;/h2&gt;

&lt;p&gt;Usage-based pricing across the board — no single flat subscription. Residential proxies run roughly $8/GB pay-as-you-go, dropping toward $2.50–$3/GB on committed volume.&lt;/p&gt;

&lt;p&gt;Web Unlocker and SERP API are typically priced per 1,000 successful requests, starting around $0.75–$1.50/1K depending on the tier.&lt;/p&gt;

&lt;p&gt;Independent benchmarks consistently place Bright Data at or near the top on success rate against heavily protected targets like Google, Indeed, and Zillow.&lt;/p&gt;

&lt;p&gt;No meaningful free tier, but trial credits are available, and the platform becomes genuinely cost-competitive once monthly spend passes roughly $200.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cons
&lt;/h2&gt;

&lt;p&gt;It’s genuinely expensive at low volume, with no real free plan, small projects end up paying enterprise-level rates for a fraction of the usage.&lt;/p&gt;

&lt;p&gt;Pricing is spread across nine-plus separate products (residential, datacenter, SERP API, Web Unlocker, etc.), so figuring out what your actual monthly bill will look like takes real effort.&lt;/p&gt;

&lt;p&gt;Best for: enterprise teams that need the largest possible IP pool and the highest success rate on the hardest anti-bot targets, and have the budget to match.&lt;/p&gt;

&lt;h2&gt;
  
  
  Decodo
&lt;/h2&gt;

&lt;p&gt;Decodo rebranded from Smartproxy in 2025 but kept the same infrastructure: a 115M+ IP residential network, a Site Unblocker product, and an all-in-one Scraping API covering search engines and e-commerce sites.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3d26ur2lskdurfdkl8tz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3d26ur2lskdurfdkl8tz.png" alt=" " width="720" height="201"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Pros
&lt;/h2&gt;

&lt;p&gt;Fully self-serve. You do not need to pass any KYC resistance.&lt;/p&gt;

&lt;p&gt;Residential proxies start around $3.75/GB on the entry tier and scale down toward $2/GB at the 1TB tier; pay-as-you-go sits around $4/GB with zero commitment.&lt;/p&gt;

&lt;p&gt;Site Unblocker is billed per 1,000 successful requests, at roughly $1.20/1K, and covers CAPTCHA solving and JavaScript rendering automatically.&lt;/p&gt;

&lt;p&gt;ISO/IEC 27001 certified, which matters if your team has a compliance checklist.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cons
&lt;/h2&gt;

&lt;p&gt;The free trial is tiny with just 3 days and 100MB, which is barely enough to test one scraper run, let alone a real workload.&lt;/p&gt;

&lt;p&gt;On sites with tougher anti-bot protection like Cloudflare or Akamai, success rates drop off unless you’re on the pricier Site Unblocker tier.&lt;/p&gt;

&lt;p&gt;Best for: teams that want Oxylabs-style residential proxy quality at roughly half the entry price, without going through KYC.&lt;/p&gt;

&lt;h2&gt;
  
  
  ScraperAPI
&lt;/h2&gt;

&lt;p&gt;ScraperAPI wraps proxy rotation, JavaScript rendering, and CAPTCHA solving into a single flat-rate credit system, with dedicated structured-data endpoints for Amazon and Google.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdfe253kl8d4u8q1firta.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdfe253kl8d4u8q1firta.png" alt=" " width="720" height="287"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Pros&lt;br&gt;
Plans start around $49/month, with a free-credit trial and no credit card required to sign up.&lt;/p&gt;

&lt;p&gt;Pricing is credit-based but transparent: a fixed number of credits per request regardless of how “hard” the target site turns out to be, which makes budgeting easier than Oxylabs’ per-product pricing.&lt;/p&gt;

&lt;p&gt;Includes an async endpoint, structured data endpoints, and a no-code scheduling tool (DataPipeline) on all plans.&lt;/p&gt;

&lt;p&gt;Cons&lt;br&gt;
Google APIs are extremely slow and come with super low success rates.&lt;/p&gt;

&lt;p&gt;Like most credit-based tools, the advertised price looks cheap upfront, but JavaScript rendering and premium proxies can multiply your effective cost well beyond the headline rate.&lt;/p&gt;

&lt;p&gt;Best for: developers who already have their own parsing logic and just want a reliable, predictably-priced proxy and rendering layer.&lt;/p&gt;

&lt;h2&gt;
  
  
  Zyte
&lt;/h2&gt;

&lt;p&gt;Zyte (formerly Scrapinghub) is the company behind the open-source Scrapy framework, and its Zyte API automatically tiers pricing by how difficult a target site is to scrape.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8c86lvxd888cuotvsrcu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8c86lvxd888cuotvsrcu.png" alt=" " width="720" height="387"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Pros
&lt;/h2&gt;

&lt;p&gt;Pay-as-you-go HTTP requests run roughly $0.13–$1.27 per 1,000, and browser-rendered requests run $1.01–$16.08 per 1,000, depending on site difficulty.&lt;/p&gt;

&lt;p&gt;Monthly commitments ($100 / $200 / $500) unlock meaningfully lower per-request rates.&lt;/p&gt;

&lt;p&gt;Scrapy Cloud is sold separately for teams hosting their own Python/Scrapy spiders, starting around $9/month per unit.&lt;/p&gt;

&lt;p&gt;$5 free trial credit is available to test before committing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cons
&lt;/h2&gt;

&lt;p&gt;Because pricing is tier-based and automatic, it can be hard to predict your exact monthly bill in advance.&lt;/p&gt;

&lt;p&gt;Response times and support have both drawn complaints. Many users are reporting that they got a reply after 10+ days.&lt;/p&gt;

&lt;p&gt;Best for: teams already built on Scrapy who want managed anti-bot handling without leaving the Python ecosystem.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&amp;gt; Pricing is approximate and pulled from publicly listed rates as of mid-2026 — always confirm current numbers on each provider’s pricing page before budgeting, since these change often.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Which Oxylabs Alternative Should You Actually Pick?
&lt;/h2&gt;

&lt;p&gt;Tight budget, need dedicated APIs (Google, Amazon, Walmart): Scrapingdog.&lt;/p&gt;

&lt;p&gt;Need the biggest IP pool and highest success rate on the hardest targets, budget isn’t the constraint: Bright Data.&lt;/p&gt;

&lt;p&gt;Want cheap self-serve residential bandwidth without KYC: Decodo.&lt;/p&gt;

&lt;p&gt;Building on Scrapy or need Python-native tooling: Zyte.&lt;/p&gt;

&lt;p&gt;Oxylabs is a genuinely strong platform, and it’s still the right call if you’re an enterprise buyer who needs a dedicated account manager and can absorb its pricing. But for most developers and small teams, one of the five alternatives above will get you the same data with less friction and a smaller bill.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>How to Find All URLs on a Domain's Website: 4 Methods Explained</title>
      <dc:creator>Darshan Khandelwal</dc:creator>
      <pubDate>Wed, 24 Jun 2026 13:00:14 +0000</pubDate>
      <link>https://dev.to/darshan_sd/how-to-find-all-urls-on-a-domains-website-4-methods-explained-1a2c</link>
      <guid>https://dev.to/darshan_sd/how-to-find-all-urls-on-a-domains-website-4-methods-explained-1a2c</guid>
      <description>&lt;p&gt;Finding all the URLs on a domain sounds simple until you actually try it. Google’s site: search misses pages. Sitemaps skip no-indexed content. Manual crawling breaks on large sites. And if the website renders pages via JavaScript, most tools won’t even see them.&lt;/p&gt;

&lt;p&gt;Whether you’re auditing your own site before a migration, mapping a competitor’s content structure, hunting for broken links, or building a scraper that needs every page URL, this is one of the most common (and most misunderstood) tasks in web scraping and SEO.&lt;/p&gt;

&lt;p&gt;In this guide, we’ll walk through multiple methods to find all URLs on a domain, from zero-code approaches you can run in 30 seconds to Python scripts that scale to thousands of pages. For each method, we’ll cover what it finds, what it misses, and when to use it.&lt;/p&gt;

&lt;p&gt;Let’s get into it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Find All URLs On A Domain’s Website
&lt;/h2&gt;

&lt;p&gt;Before jumping into the methods, it’s worth knowing the most common reasons people do this, because your goal will determine which method makes the most sense.&lt;/p&gt;

&lt;p&gt;SEO auditing — find orphan pages, check for duplicate content, spot pages that shouldn’t be indexed, or verify that all your important URLs are actually crawlable.&lt;/p&gt;

&lt;p&gt;Broken link detection — crawl every URL on your domain and check their status codes. A full URL list is the starting point for any broken link audit.&lt;/p&gt;

&lt;p&gt;Site migration — before moving to a new domain or CMS, you need a complete inventory of every page so nothing gets left behind or loses its redirect.&lt;/p&gt;

&lt;p&gt;Competitive research — map out a competitor’s content structure to find topics they’re covering that you aren’t.&lt;/p&gt;

&lt;p&gt;Web scraping — if you want to scrape data from every page on a site, you first need a list of every page to scrape.&lt;/p&gt;

&lt;p&gt;Content audits — identify thin pages, outdated posts, or content gaps across your entire site.&lt;/p&gt;

&lt;p&gt;Now, let’s discuss all the techniques in brief.&lt;/p&gt;

&lt;h2&gt;
  
  
  Google search technique
&lt;/h2&gt;

&lt;p&gt;Google Search is the fastest zero-setup method; just enter a search query to find indexed pages on any domain. The catch: Google excludes pages for reasons like duplicate content or noindex tags, so results are never a complete picture.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sitemaps and robots.txt
&lt;/h2&gt;

&lt;p&gt;Sitemaps and robots.txt give you a more structured view of a site’s pages than Google search, but they come with their own blind spots. A domain can have multiple sitemaps, some pages may be 302 redirecting at the time you check, and SEO plugins like RankMath or Yoast automatically drop non-canonical pages from the sitemap entirely. So if Page A has a canonical pointing to Page B, Page A simply won’t appear.&lt;/p&gt;

&lt;h2&gt;
  
  
  SEO crawling tools
&lt;/h2&gt;

&lt;p&gt;SEO crawling tools are the most straightforward option — no code, detailed output, and easy to use. The tradeoff is cost; most tools limit free usage to 500 pages, which works fine for smaller sites but requires a paid plan once you scale.&lt;/p&gt;

&lt;h2&gt;
  
  
  Scraping
&lt;/h2&gt;

&lt;p&gt;If you’re comfortable with coding, a custom scraper gives you the most control: filter by URL pattern, exclude directories, handle pagination, or integrate directly into your pipeline. It takes more setup, but for large or complex sites, it’s often the only method that gets you everything you need.&lt;/p&gt;

&lt;h2&gt;
  
  
  Through Google Site Search
&lt;/h2&gt;

&lt;p&gt;One of the quickest ways to find URLs on a website is with Google’s site search feature. Here’s how to use it:&lt;/p&gt;

&lt;p&gt;Go to Google.com&lt;/p&gt;

&lt;p&gt;In the search bar, type site:example.com (replace example.com with the website you want to search).&lt;/p&gt;

&lt;p&gt;Hit enter to see the list of indexed pages for that website.&lt;/p&gt;

&lt;p&gt;Let’s find all the pages on scrapingdog.com. Search for site:scrapingdog.com on Google and hit enter.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdeexqczmcqkeba0d025z.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdeexqczmcqkeba0d025z.png" alt=" " width="800" height="599"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Google will return a list of indexed pages for a specific domain.&lt;/p&gt;

&lt;p&gt;However, as discussed earlier, Google may exclude certain pages for reasons such as duplicate content, low-quality, or inaccessible pages.&lt;/p&gt;

&lt;p&gt;So, the “site:” search query is best for getting rough estimates, but it may not be the most accurate measure.&lt;/p&gt;

&lt;p&gt;If you want to do it programatically then you can take help of the Google Search API and Python to extract all the links without manually checking each page on google.&lt;/p&gt;

&lt;h2&gt;
  
  
  Through Sitemaps and robots.txt
&lt;/h2&gt;

&lt;p&gt;Sitemaps and robots.txt are two files that almost every website exposes publicly, and together they can give you a near-complete picture of a site’s URL structure. Unlike Google search, you’re not dependent on what Google has chosen to index; you’re looking directly at what the site owner has declared. Here’s how to use each one.&lt;/p&gt;

&lt;h2&gt;
  
  
  Using sitemaps
&lt;/h2&gt;

&lt;p&gt;A sitemap is an XML file listing all important website pages for search engine indexing. Webmasters use it to help search engines understand the website’s structure and content for better indexing.&lt;/p&gt;

&lt;p&gt;Every decent website has a sitemap as it improves Google rankings and is considered a good SEO practice. To learn how to create and optimize one effectively, read the article for practical tips.&lt;/p&gt;

&lt;p&gt;Here’s what a standard sitemap looks like:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fooqddig82eloa3lhljeo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fooqddig82eloa3lhljeo.png" alt=" " width="800" height="629"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The  element specifies the page URL,  indicates the last modification time, and  signifies the relative importance for search engines (higher priority means more frequent crawling).&lt;/p&gt;

&lt;p&gt;Now, where to find a sitemap? Check for /sitemap.xml on the website (e.g., &lt;a href="https://scrapingdog.com/sitemap.xml" rel="noopener noreferrer"&gt;https://scrapingdog.com/sitemap.xml&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;Websites can have multiple sitemaps in various locations, including: /sitemap.xml.gz, /sitemap_index.xml, /sitemap_index.xml.gz, /sitemap.php, /sitemapindex.xml, /sitemap.gz.&lt;/p&gt;

&lt;p&gt;Most websites mention the number of sitemaps they have under the domain in the robots.txt file, which we are going to discuss next.&lt;/p&gt;

&lt;h2&gt;
  
  
  Using robots.txt
&lt;/h2&gt;

&lt;p&gt;The robots.txt file instructs search engine crawlers on which pages to index and which ones to exclude from indexing. It can also specify the location of the website’s sitemap. The file is often located at the /robots.txt path (e.g., &lt;a href="https://scrapingdog.com/robots.txt" rel="noopener noreferrer"&gt;https://scrapingdog.com/robots.txt&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;Here’s an example of a robots.txt file. Some routes are disallowed for indexing. The sitemap location is also present.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmo8yvidxdw9qwi68n6rk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmo8yvidxdw9qwi68n6rk.png" alt=" " width="800" height="185"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You need to visit both sitemaps and find all the URLs within the website. Note that, for smaller sitemaps, you can manually copy the URLs from each tag. But for larger sitemaps, consider using an online tool to convert the XML format to a more manageable format, such as CSV. There are free tools available, like the one Seowl sitemap extractor.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvqjxdtdhwsulcc85dp1y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvqjxdtdhwsulcc85dp1y.png" alt=" " width="800" height="549"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Through SEO Crawling Tools
&lt;/h2&gt;

&lt;p&gt;Now let’s see how SEO crawling tools help us find all website pages. There are various SEO crawlers in the market, we’ll explore the free tool XML-Sitemaps.com. Enter your URL and click “START” to create a sitemap. This tool is suitable when you need to quickly create a sitemap for a small website (up to 500) pages.&lt;/p&gt;

&lt;p&gt;The process will start and you will see the number of pages scanned (167 in this case) and the number of pages indexed (127 in this case). This indicates that only around 127 of the scanned pages are currently indexed in Google Search.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fy4ox064yzq3uj5ymq444.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fy4ox064yzq3uj5ymq444.png" alt=" " width="800" height="225"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once the crawling process is complete, the sitemap preview will display all the website’s indexed URLs, including the last modification date and time, as well as the priority of each URL.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsrfo90n068nypyrzdkkf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsrfo90n068nypyrzdkkf.png" alt=" " width="800" height="406"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can download the XML sitemap file or receive it via email and put it on your website afterward.&lt;/p&gt;

&lt;p&gt;Screamingfrog is another free tool that can help you with exporting URLs from a domain. Keep in mind that the free version allows you to get 500 URLs from a single domain. To use it, you have to download the software on your machine &amp;amp; unlike SaaS, it will crawl the domain from your setup only.&lt;/p&gt;

&lt;h2&gt;
  
  
  Through Web Scraping
&lt;/h2&gt;

&lt;p&gt;If you’re a developer, you can build your crawler script to find all URLs on a website. Here, you can take advantage of web scraping APIs like Scrapingdog.&lt;/p&gt;

&lt;p&gt;This method offers more flexibility and control over crawling compared to previous methods. It allows you to customize behavior, handle dynamic content, and extract URLs based on specific patterns or criteria.&lt;/p&gt;

&lt;p&gt;You can use any language for web crawling, such as Python, JavaScript, or Golang. In this example, we will use Python. Also, &lt;a href="https://api.scrapingdog.com/register" rel="noopener noreferrer"&gt;sign up&lt;/a&gt; for the trial Scrapingdog pack.&lt;/p&gt;

&lt;p&gt;You can export the list and keep it in CSV inside a folder.&lt;/p&gt;

&lt;h2&gt;
  
  
  Using Python and Scrapingdog
&lt;/h2&gt;

&lt;p&gt;Before writing the code, make sure you have installed the necessary libraries.&lt;/p&gt;

&lt;p&gt;Install the libraries using pip:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1pip install beautifulsoup4 requests
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Next, let’s create a Python file (I am naming the file as main.py) and write the code.&lt;/p&gt;

&lt;p&gt;If you paste your target website in the Scrapingdog scraper, you will get a ready to use python code.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqphhg9tyy51mcan6fg5y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqphhg9tyy51mcan6fg5y.png" alt=" " width="800" height="291"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Just copy this code and paste it into the main.py file. I have used format as links, this ensures you get output as links only and not the whole HTML data.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1import requests2 3url = "https://api.scrapingdog.com/scrape"4params = {5    "api_key": "your-api-key",6    "url": "https://www.scrapingdog.com",7    "dynamic": "false",8    "formats": "links"9}10 11response = requests.get(url, params=params)12print(response.text)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once you run this code, you will get this JSON response with all the links available on this page.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fd2dq81tv4lrnlfk24eld.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fd2dq81tv4lrnlfk24eld.png" alt=" " width="800" height="601"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now, you can continue making these GET requests to all these URLs using Scrapingdog to extract all the links on that particular domain.&lt;/p&gt;

&lt;p&gt;Now, if you want to store all these URLs in a CSV file, you can use Python’s pandas library.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1import requests2import pandas as pd3 4url = "https://api.scrapingdog.com/scrape"5params = {6    "api_key": "your-api-key",7    "url": "https://www.scrapingdog.com",8    "dynamic": "false",9    "formats": "links"10}11 12response = requests.get(url, params=params)13 14if response.ok:15    data = response.json()16    links = data.get("links", [])17    18    df = pd.DataFrame(links, columns=["URL"])19    df.to_csv("scrapingdog_links.csv", index=False)20    print(f"Saved {len(df)} links to scrapingdog_links.csv")21else:22    print(f"Request failed with status code: {response.status_code}")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The crawled URLs will be stored in a CSV file, as shown below:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F80jd2beei9oifjxick81.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F80jd2beei9oifjxick81.png" alt=" " width="800" height="328"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can read our guide &lt;a href="https://www.scrapingdog.com/blog/web-scraping-with-python/" rel="noopener noreferrer"&gt;web scraping with python&lt;/a&gt; to get more idea on how a scraper can be built using Python.&lt;/p&gt;

&lt;h2&gt;
  
  
  Which Method Should You Use?
&lt;/h2&gt;

&lt;p&gt;With four methods on the table, the right choice comes down to your goal, technical comfort, and the size of the site you’re working with. Here’s a quick reference:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fe7mrpujpg0k015nufacc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fe7mrpujpg0k015nufacc.png" alt=" " width="800" height="742"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Takeaways
&lt;/h2&gt;

&lt;p&gt;No single method finds every URL on a domain. For a complete picture, always combine at least two methods.&lt;/p&gt;

&lt;p&gt;Google’s site: operator is the fastest starting point but should only be used for rough estimates — it regularly misses pages due to noindex tags, duplicate content filters, and indexing delays.&lt;/p&gt;

&lt;p&gt;Screaming Frog is the best free option for a full SEO crawl, but caps at 500 URLs on the free plan. For larger sites, use a Python crawler or Scrapingdog’s API.&lt;/p&gt;

&lt;p&gt;JavaScript-heavy sites require a rendering-capable tool. Standard HTTP requests won’t execute JavaScript, so use Scrapingdog’s API to get fully rendered HTML before parsing links.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Finding all the URLs on a domain is one of those tasks that looks straightforward on the surface but has more nuance than most people expect. Different methods find different pages, and no single approach gives you the full picture every time.&lt;/p&gt;

&lt;p&gt;The good news is you don’t need to pick just one. Start with a sitemap for the declared URLs, layer in a crawler for anything that was missed, and fall back to Scrapingdog’s API when JavaScript rendering gets in the way.&lt;/p&gt;

&lt;p&gt;Whether you’re running an SEO audit, prepping for a site migration, or building a scraper, a clean, complete URL list is always the starting point. Now you have six ways to build one.&lt;/p&gt;

&lt;p&gt;If you want to skip the setup entirely and start extracting URLs right away, try &lt;a href="https://api.scrapingdog.com/register" rel="noopener noreferrer"&gt;Scrapingdog for free&lt;/a&gt; with 1000 credits, no credit card required.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Scrape Baidu Search Results using Python: A Step by Step Guide</title>
      <dc:creator>Darshan Khandelwal</dc:creator>
      <pubDate>Tue, 23 Jun 2026 13:16:51 +0000</pubDate>
      <link>https://dev.to/darshan_sd/scrape-baidu-search-results-using-python-a-step-by-step-guide-447d</link>
      <guid>https://dev.to/darshan_sd/scrape-baidu-search-results-using-python-a-step-by-step-guide-447d</guid>
      <description>&lt;p&gt;When it comes to search engine data, most tutorials focus on Google, but what if your target audience is in China? That’s where Baidu, the country’s leading search engine, comes in. Whether you’re tracking keyword rankings, monitoring competitors, or gathering localized insights, scraping Baidu search results can give you access to valuable, real-time data that isn’t available elsewhere.&lt;/p&gt;

&lt;p&gt;In this guide, we’ll walk you through how to scrape Baidu search results using Python, step by step no prior scraping experience required.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why scrape Baidu Search Results?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.theegg.com/seo/china/most-popular-search-engines-in-china" rel="noopener noreferrer"&gt;Baidu dominates&lt;/a&gt; the Chinese search market, holding over 75% share, making it the go-to source for online information in China. Scraping Baidu search results allows developers, marketers, and researchers to gain deep insights into the Chinese web ecosystem. You can:&lt;/p&gt;

&lt;p&gt;🔍 Track keyword rankings for SEO in Chinese markets.&lt;/p&gt;

&lt;p&gt;🏢 Monitor competitors and analyze their visibility in Baidu’s SERPs.&lt;/p&gt;

&lt;p&gt;📰 Collect news and content trends relevant to specific industries.&lt;/p&gt;

&lt;p&gt;📊 Build datasets for training AI and NLP models with localized content.&lt;/p&gt;

&lt;p&gt;🌏 Understand market behavior and consumer interests unique to China.&lt;/p&gt;

&lt;p&gt;In short, if your business or research involves Chinese audiences, scraping Baidu is one of the most direct and effective ways to access that data.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why use Scrapingdog to Scrape Baidu search results?
&lt;/h2&gt;

&lt;p&gt;Scraping Baidu directly can be challenging due to its strict anti-bot systems, IP rate limits, and frequent layout changes. That’s where &lt;a href="https://www.scrapingdog.com/" rel="noopener noreferrer"&gt;Scrapingdog&lt;/a&gt; comes in, and it takes care of all the heavy lifting like proxy rotation, CAPTCHA handling, and response parsing. Instead of worrying about blocked requests or HTML changes, you can simply send a query and receive structured, ready-to-use data.&lt;/p&gt;

&lt;p&gt;With Scrapingdog’s &lt;a href="https://docs.scrapingdog.com/baidu-scraper-api/baidu-search-api" rel="noopener noreferrer"&gt;Baidu Search API&lt;/a&gt;, you get clean JSON output containing titles, links, and snippets, and all accessible in one simple API call. It’s fast, reliable, and built to scale, whether you’re scraping a few keywords for SEO or running large-scale data collection for AI and analytics. In short, it saves developers hours of setup time while maintaining accuracy and consistency across requests.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prerequisite
&lt;/h2&gt;

&lt;p&gt;I hope you have already installed Python 3.x on your machine; if not, you can download it from here.&lt;/p&gt;

&lt;p&gt;Now, create a folder by any name you like. I am naming the folder as webpython. Inside this folder, create a Python file and name it whatever you like. Now, install requests library inside this folder. We will use this to make an HTTP connection with the host website.&lt;/p&gt;

&lt;p&gt;The final step is to &lt;a href="https://api.scrapingdog.com/register" rel="noopener noreferrer"&gt;sign up&lt;/a&gt; for &lt;a href="https://www.scrapingdog.com/" rel="noopener noreferrer"&gt;Scrapingdog’s&lt;/a&gt; trial pack. You’ll receive 1,000 free credits upon signup, which you can use to test any of Scrapingdog’s APIs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Scrape Baidu Search page with Python
&lt;/h2&gt;

&lt;p&gt;After signup on Scrapingdog you will be redirected to your dashboard. You will find a Baidu Search API over there.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fre5a44eb4fhz5eqpvbxu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fre5a44eb4fhz5eqpvbxu.png" alt=" " width="800" height="650"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once you click on it, you will see a scraper where you just need to pass a sample query, and it will pull the data and return it to you in neat JSON format.&lt;/p&gt;

&lt;p&gt;For this tutorial, we will pass the query as web scraping. After passing the query you will get a ready Python code; you just have to copy that and paste it in your Python file.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkar3u816k6c1wxanrjp6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkar3u816k6c1wxanrjp6.png" alt=" " width="800" height="503"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1import requests2 3api_key = "your-api-key"4url = "https://api.scrapingdog.com/baidu/search"5 6params = {7    "api_key": api_key,8    "query": "web scraping"9}10 11response = requests.get(url, params=params)12 13if response.status_code == 200:14    data = response.json()15    print(data)16else:17    print(f"Request failed with status code: {response.status_code}")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Let me explain this code step-by-step.&lt;/p&gt;

&lt;p&gt;First we have imported the requests library. This will be used for making the HTTP connection with the host website.&lt;/p&gt;

&lt;p&gt;Then we are storing the API key and the Scrapingdog’s Baidu Search API URL.&lt;/p&gt;

&lt;p&gt;Then we are making the GET request with the help of requests library.&lt;/p&gt;

&lt;p&gt;If the request is successful (status 200), it prints the search results.&lt;/p&gt;

&lt;p&gt;If it fails, it prints the error status code.&lt;/p&gt;

&lt;p&gt;Once you run the code you will get this parsed JSON data.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F360zxgdahrsnghs3jcaf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F360zxgdahrsnghs3jcaf.png" alt=" " width="800" height="599"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In this JSON response you will find the title, link, snippet and rank of the result.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Takeaways:
&lt;/h2&gt;

&lt;p&gt;You can programmatically extract Baidu search results using Scrapingdog’s Baidu Search API.&lt;/p&gt;

&lt;p&gt;The API returns clean, structured SERP data without manual HTML parsing.&lt;/p&gt;

&lt;p&gt;Using an API solves common challenges like proxy rotation and anti-bot measures.&lt;/p&gt;

&lt;p&gt;You can customize search parameters like language, pagination, and filters.&lt;/p&gt;

&lt;p&gt;This approach scales well for data collection and analytics.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Scraping Baidu data doesn’t have to be complex or time-consuming. With Python and Scrapingdog’s &lt;a href="https://docs.scrapingdog.com/baidu-scraper-api/baidu-search-api" rel="noopener noreferrer"&gt;Baidu Search API&lt;/a&gt;, you can easily extract clean, structured data from Baidu’s search results without dealing with IP bans, CAPTCHAs, or changing HTML layouts. Whether you’re monitoring keyword trends, gathering localized content, or powering AI applications, this API makes it effortless to access reliable Baidu search data at scale.&lt;/p&gt;

&lt;p&gt;In short, instead of spending hours maintaining scrapers, you can focus on what really matters, analyzing data to make smarter decisions in one of the country’s leading markets.&lt;/p&gt;

&lt;p&gt;Start your free trial on Scrapingdog today and automate Baidu scraping in just a few lines of Python.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ (Frequently Asked Questions)
&lt;/h2&gt;

&lt;h2&gt;
  
  
  1: Is it legal to scrape Baidu search results?
&lt;/h2&gt;

&lt;p&gt;Yes, scraping publicly available Baidu search results is generally allowed. However, you should always follow Baidu’s terms of service and local data regulations when using the data commercially.&lt;/p&gt;

&lt;h2&gt;
  
  
  2: Can I scrape Baidu without getting blocked?
&lt;/h2&gt;

&lt;p&gt;Direct scraping often leads to IP bans and CAPTCHAs. Scrapingdog handles proxies and CAPTCHAs automatically, so you can scrape Baidu reliably.&lt;/p&gt;

&lt;h2&gt;
  
  
  3: What data can I extract from Baidu using Scrapingdog?
&lt;/h2&gt;

&lt;p&gt;You can extract the title, URL, snippet, and ranking position in structured JSON format.&lt;/p&gt;

&lt;h2&gt;
  
  
  4: Can Scrapingdog handle large-scale Baidu scraping?
&lt;/h2&gt;

&lt;p&gt;Yes, Scrapingdog is built for scale and supports both small and high-volume Baidu scraping use cases.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>How to Scrape Home Depot Product Data [Step-by-Step Guide]</title>
      <dc:creator>Darshan Khandelwal</dc:creator>
      <pubDate>Tue, 09 Jun 2026 13:37:58 +0000</pubDate>
      <link>https://dev.to/darshan_sd/how-to-scrape-home-depot-product-data-step-by-step-guide-3lni</link>
      <guid>https://dev.to/darshan_sd/how-to-scrape-home-depot-product-data-step-by-step-guide-3lni</guid>
      <description>&lt;p&gt;Scraping Home Depot isn’t straightforward. It uses JavaScript rendering, rate limiting, CAPTCHA challenges, and IP bans to block automated requests. You need the right tools and approach to collect data reliably at scale.&lt;/p&gt;

&lt;p&gt;In this guide, you’ll learn how to scrape Home Depot using Python, from listing pages and product details to reviews and pagination, and export everything into a clean CSV file. You can also refer our guide on web scraping with python to learn scraping with python.&lt;/p&gt;

&lt;p&gt;TL;DR&lt;br&gt;
If you know the complete logic begind the scraping and parsing then you can just copy this code and use it.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import requests
from bs4 import BeautifulSoup

response = requests.get(
    "https://api.scrapingdog.com/scrape",
    params={
        "api_key": "your-api-key",
        "url": "https://www.homedepot.com/p/RYOBI-ONE-18V-Lithium-Ion-2-0Ah-4-0Ah-Starter-Kit-with-1-2Ah-HP-Battery-1-4Ah-HP-Battery-and-Charger-PSK1212SB/339206615",
        "dynamic": "false"
    }
)
print(response.status_code)

obj={}
soup = BeautifulSoup(response.text, "html.parser")

# Title
title = soup.find("h1", class_="sui-line-clamp-unset")
obj["Title"] = title.get_text(strip=True)

# Price - dollar, cents in separate spans
price_parts = soup.find_all("span", class_="sui-font-display")[:3]
price = "".join([p.get_text(strip=True) for p in price_parts])
obj["Price"]=price

# Image - actual class in this page
img = soup.find("img", attrs={"data-testid": "small-image"})
obj["image"]=img["src"]

# Features
features_ul = soup.find("ul", class_="sui-text-base")
if features_ul:
    features = [li.get_text(strip=True) for li in features_ul.find_all("li")]
    obj["features"]=features

# Rating
rating_tag = soup.find("a", class_="sui-flex-row")
obj["Rating"]=rating_tag["title"]

print(obj)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Why Scrape Home Depot?
&lt;/h2&gt;

&lt;p&gt;Home Depot has over 1 million products listed online, making it a valuable source for e-commerce data. Here’s what you can do with it:&lt;/p&gt;

&lt;p&gt;Price monitoring — Track price changes and adjust your pricing strategy.&lt;br&gt;
Competitor analysis — See how competing brands position and price their products.&lt;br&gt;
Inventory tracking — Monitor stock availability to spot supply gaps or demand surges.&lt;br&gt;
Review analysis — Collect customer feedback at scale to understand sentiment.&lt;br&gt;
Market research — Identify trending products and top-rated brands.&lt;/p&gt;
&lt;h2&gt;
  
  
  Requirements
&lt;/h2&gt;

&lt;p&gt;To start with, you need Python installed on your machine. If you have not installed it, then you can download it from here. For this tutorial, we will require three libraries:&lt;/p&gt;

&lt;p&gt;requests — We will use this to make an HTTP connection with the Host website.&lt;br&gt;
BS4 — This will be used for parsing the data downloaded using requests.&lt;br&gt;
Pandas — This will be used to store data in a CSV file.&lt;br&gt;
The final step would be to signup for a trial account of Scrapingdog. You will get 1000 free credits, which are enough for this tutorial.&lt;/p&gt;
&lt;h2&gt;
  
  
  Scraping Home Depot Product Page
&lt;/h2&gt;

&lt;p&gt;For this tutorial, we are going to scrape this page from Home Depot. Create a Python file by any name you like. I am naming the file as home.py.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqekdvihgb54dsgrxmh3d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqekdvihgb54dsgrxmh3d.png" alt=" " width="720" height="320"&gt;&lt;/a&gt;&lt;br&gt;
From the product page, we will scrape:&lt;/p&gt;

&lt;p&gt;Title&lt;br&gt;
Price&lt;br&gt;
Images&lt;br&gt;
Features&lt;br&gt;
Rating&lt;/p&gt;
&lt;h2&gt;
  
  
  Scraping Home Depot with Scrapingdog
&lt;/h2&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import requests

url = "https://api.scrapingdog.com/scrape"
params = {
    "api_key": "your-api-key",
    "url": "https://www.homedepot.com/p/RYOBI-ONE-18V-Lithium-Ion-2-0Ah-4-0Ah-Starter-Kit-with-1-2Ah-HP-Battery-1-4Ah-HP-Battery-and-Charger-PSK1212SB/339206615?MERCH=REC-_-rv_homepage_rr-_-n/a-_-0-_-n/a-_-n/a-_-n/a-_-n/a-_-n/a",
    "dynamic": "false"
}

response = requests.get(url, params=params)
print(response.status_code)
print(response.text)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Here we are making the GET request using requests to the scrape endpoint provided by Scrapingdog. Do not forget to pass your own private Scrapingdog’s key.&lt;/p&gt;

&lt;p&gt;Let’s run this code.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjs21krs1m2z1sv7c9lhl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjs21krs1m2z1sv7c9lhl.png" alt=" " width="720" height="227"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After running the code, you will get a 200 status code along with the HTML of the target page.&lt;/p&gt;

&lt;p&gt;Now, we can use beautifulSoup to parse this data.&lt;/p&gt;
&lt;h2&gt;
  
  
  Parsing the required data with BeautifulSoup
&lt;/h2&gt;

&lt;p&gt;Let’s start with the title. We have to find the DOM location of the title.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj8jg1p8pjtorqzqi5e74.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj8jg1p8pjtorqzqi5e74.png" alt=" " width="720" height="112"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The title is wrapped inside a H1 tag with a class sui-line-clamp-unset.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdkr1e6j1g30vzusv221f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdkr1e6j1g30vzusv221f.png" alt=" " width="720" height="139"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The pricing is hidden inside the first three span tag with class sui-font-display.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwxdh8adghm2j2beob49i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwxdh8adghm2j2beob49i.png" alt=" " width="720" height="310"&gt;&lt;/a&gt;&lt;br&gt;
The product image is wrapped inside an img tag with class sui-w-full.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4ujxnpa98qkj2zb8essk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4ujxnpa98qkj2zb8essk.png" alt=" " width="720" height="180"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;All the features of the product are located inside the ul tag with class sui-text-base.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftfckj602ngux9z34bj3s.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftfckj602ngux9z34bj3s.png" alt=" " width="720" height="216"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The rating of the product is wrapped inside a tag with class sui-flex-row.&lt;/p&gt;

&lt;p&gt;Now, we have the DOM location of every data point we want to parse from the raw HTML. Let’s implement this logic with BS4.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import requests
from bs4 import BeautifulSoup

response = requests.get(
    "https://api.scrapingdog.com/scrape",
    params={
        "api_key": "your-api-key",
        "url": "https://www.homedepot.com/p/RYOBI-ONE-18V-Lithium-Ion-2-0Ah-4-0Ah-Starter-Kit-with-1-2Ah-HP-Battery-1-4Ah-HP-Battery-and-Charger-PSK1212SB/339206615",
        "dynamic": "false"
    }
)
print(response.status_code)

obj={}
soup = BeautifulSoup(response.text, "html.parser")

# Title
title = soup.find("h1", class_="sui-line-clamp-unset")
obj["Title"] = title.get_text(strip=True)

# Price — dollar, cents in separate spans
price_parts = soup.find_all("span", class_="sui-font-display")[:3]
price = "".join([p.get_text(strip=True) for p in price_parts])
obj["Price"]=price

# Image — actual class in this page
img = soup.find("img", attrs={"data-testid": "small-image"})
obj["image"]=img["src"]

# Features
features_ul = soup.find("ul", class_="sui-text-base")
if features_ul:
    features = [li.get_text(strip=True) for li in features_ul.find_all("li")]
    obj["features"]=features

# Rating
rating_tag = soup.find("a", class_="sui-flex-row")
obj["Rating"]=rating_tag["title"]

print(obj)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once you run this code you will get this beautiful parsed JSON data with all the details we were looking for.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{'Title': 'ONE+ 18V Lithium-Ion 2.0Ah, 4.0Ah Starter Kit with (1) 2Ah HP Battery, (1) 4Ah HP Battery and Charger', 'Price': '$9900', 'image': 'https://images.thdstatic.com/productImages/3f4be679-3a35-40e5-8935-f6876f66f03a/svn/ryobi-power-tool-batteries-psk1212sb-64_600.jpg', 'features': ['Up to 4X More Runtime', '4Ah &amp;amp; 2Ah Lithium HIGH PERFORMANCE Batteries &amp;amp; Charger', 'Power All 300 ONE+ Products With Any RYOBI 18V ONE+ Battery', 'View More Details'], 'Rating': '4.5 out of 5'}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Storing the data in a CSV file
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;extracted_data.append(obj)

df = pd.DataFrame(extracted_data)
df.to_csv("home_depot.csv", index=False)
print(" Data saved to csv successfully.")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Appends each scraped product as a dict into a list, then converts that list into a pandas DataFrame and exports it as home_depot.csv. This will create a csv file inside your folder with the scraped data.&lt;/p&gt;

&lt;p&gt;You can repeat this process in loop with the help of a for loop for various different products on homedepot.com.&lt;/p&gt;

&lt;p&gt;FA&lt;/p&gt;

&lt;p&gt;Qs&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Is it legal to scrape Home Depot?
&lt;/h2&gt;

&lt;p&gt;Scraping publicly available data is generally legal.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Does Home Depot block web scrapers?
&lt;/h2&gt;

&lt;p&gt;Yes. It uses rate limiting, CAPTCHAs, IP bans, and JavaScript rendering to detect and block bots. That’s why you are recommended to use web scraping APIs like Scrapingdog.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Do I need a proxy to scrape Home Depot?
&lt;/h2&gt;

&lt;p&gt;Yes. Rotating residential or ISP proxies are recommended to avoid IP bans at scale.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. What data can I scrape from Home Depot?
&lt;/h2&gt;

&lt;p&gt;Product names, prices, availability, ratings, reviews, specs, model numbers, and images.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Can I scrape Home Depot without JavaScript rendering?
&lt;/h2&gt;

&lt;p&gt;No. Home Depot heavily relies on JavaScript to load product data, so you’ll need a headless browser or a scraping API.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. How do I handle pagination when scraping Home Depot?
&lt;/h2&gt;

&lt;p&gt;Increment the page offset parameter in the URL and loop through pages until no more results are returned.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Scraping Home Depot with Python gives you access to valuable product data at scale. In this guide, we covered everything from setting up your environment to extracting listings, product details, reviews, and handling pagination.&lt;/p&gt;

&lt;p&gt;The biggest challenge is avoiding blocks, use rotating proxies and handle JavaScript rendering to stay undetected. If you want to skip the infrastructure hassle, Scrapingdog’s web scraping api handles all of that out of the box.&lt;/p&gt;

&lt;p&gt;Happy scraping!&lt;/p&gt;

</description>
    </item>
    <item>
      <title>SearchAPI Alternatives in 2026</title>
      <dc:creator>Darshan Khandelwal</dc:creator>
      <pubDate>Tue, 19 May 2026 12:33:40 +0000</pubDate>
      <link>https://dev.to/darshan_sd/searchapi-alternatives-in-2026-2k5h</link>
      <guid>https://dev.to/darshan_sd/searchapi-alternatives-in-2026-2k5h</guid>
      <description>&lt;p&gt;SearchAPI.io, a developer focused SERP APIs infrastricture platform provides structured data to developers from majorly Google and other sources. It covers 50+ APIs, mainly focused on Google SERPs, and includes a $2M legal coverage clause, ZeroTrace privacy mode, and clean documentation. For a certain category of developers who need multi-search-engine coverage and legal protection for mass scraping, this can be a legitimate choice.&lt;/p&gt;

&lt;p&gt;But still, there are specific conditions where SearchAPI falls short and can become a major issue when you move it into production:&lt;/p&gt;

&lt;p&gt;The free tier is only available till 100 searches, and there is no pay-as-you-go model, causing credits to run out before even completing testing. The rate limit caps you at 20% of your monthly credits per hour, which means on burst workloads, you’ll hit throttling even when you have credits left. And at $2–4 per 1,000 searches, depending on your plan, the cost math gets uncomfortable once you’re running 100K+ queries a month. The cost decreases at scale, but it can still be higher than that of competitors.&lt;/p&gt;

&lt;p&gt;We tested 7 of the strongest SearchAPI.io alternatives on price, speed, output richness, endpoint coverage, and flexibility. Here’s the complete breakdown.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quick Comparison Table
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj1glj2lqhgcz96loibos.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj1glj2lqhgcz96loibos.png" alt=" " width="610" height="481"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What SearchAPI.io Actually Does Well
&lt;/h2&gt;

&lt;p&gt;Before getting into why developers switch, let’s be clear about where SearchAPI.io genuinely earns its place:&lt;/p&gt;

&lt;p&gt;2M$ Legal Coverage: SearchAPI offers a legal shield for collecting data from its APIs under US law applicable to customers worldwide. For enterprise teams, who scrape at scale and have concerns regarding the legality, you are already covered.&lt;/p&gt;

&lt;p&gt;ZeroTrace mode: Setting zero_trace=true in any request prevents SearchAPI from logging or storing your request parameters, queries, or responses. For teams that don’t want someone to store their sensitive data, it is quite helpful.&lt;/p&gt;

&lt;p&gt;50+ endpoints under one API key: Google Search, Google Maps, Google News, Google Shopping, Google Scholar, Google Jobs, Google Trends, Google Lens, Google Finance, Google Patents, YouTube, Amazon, Bing, Baidu, and more are all accessible through a consistent engine parameter in a single API schema. If you’re managing data from multiple search surfaces in one product, the unified schema reduces integration overhead.&lt;/p&gt;

&lt;p&gt;99.9% SLA: SearchAPI guarantees uptime. For production systems where downtime has a direct business cost, this commitment matters.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Developers Look for SearchAPI.io Alternatives
&lt;/h2&gt;

&lt;p&gt;Despite those strengths, three friction points come up consistently once teams move from evaluation to production:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;The 100-Search Free Tier Is Not Enough to Evaluate&lt;br&gt;
Most competing SERP APIs offer 1,000 (Scrapingdog) + PAYG, 2,500 (Serper), or 100/month ongoing (SerpAPI) free searches. SearchAPI only gives you 100 searches once. That’s not enough to test against your real query set, benchmark response quality across different geographies, or validate the output schema against your parsing logic. You’re essentially being pushed to pay $40 before you’ve properly evaluated the product.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The 20% Per-Hour Rate Limit Is a Real Constraint&lt;br&gt;
The 20% cap on monthly credits per hour usage can cause a constraint in your workflow. There can be some moments where, for a short period of time, you may need a large burst to handle the API requests, but you will hit a ceiling before you exhaust your credits for a month.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Cost Gap Widens Dramatically at Scale&lt;br&gt;
At 100K searches/month, SearchAPI.io costs approximately $200–400, depending on your plan tier. Scrapingdog at the same volume costs ~$25–35. That’s a 6–10x pricing gap for comparable Google SERP data quality. For projects where volume scales quickly, the compounding cost difference is significant.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  What to Look for in a SearchAPI.io Alternative
&lt;/h2&gt;

&lt;p&gt;Use this framework when evaluating your options:&lt;/p&gt;

&lt;p&gt;Pricing model: Subscription vs. PAYG. Check the credit rollover policy and overage fees.&lt;br&gt;
Rate limits: Per-hour, per-day, or concurrent request limits.&lt;br&gt;
Endpoint coverage: Does it cover the search surfaces you actually need?&lt;br&gt;
Response time: Measure at p50 and p95, not just median. Burst latency matters for real-time workflows.&lt;br&gt;
Output richness: Does it cover featured snippets on Google like AI Overviews, People Also Ask, Knowledge Graph and much more?&lt;br&gt;
Free tier: Can you properly evaluate it before paying?&lt;/p&gt;
&lt;h2&gt;
  
  
  1. Scrapingdog — Best Overall Alternative to SearchAPI.io
&lt;/h2&gt;

&lt;p&gt;Starting price: 40$ for 40k Searches&lt;br&gt;
Free tier: 1,000 credits on signup, no credit card required&lt;br&gt;
Best for: Teams that want lower cost, broader Google coverage, and other search engine coverage.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F61bcj49isazdchbsobe5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F61bcj49isazdchbsobe5.png" alt=" " width="720" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Scrapingdog’s &lt;a href="https://www.scrapingdog.com/google-serp-api/" rel="noopener noreferrer"&gt;Google SERP API&lt;/a&gt; is itself a powerful engine, powered by 25+ Google APIs, and is the most direct challenger to SearchAPI. The subscription can become 6–10x more economical at scale, with a credit rollover feature and no hourly rate caps, only a concurrency limit. Moreover, Scrapingdog also offers a pay-as-you-go system, allowing you to test the APIs thoroughly.&lt;/p&gt;

&lt;p&gt;This doesn’t close the story. SERP is just one step in completing your data workflow, what if you need the content inside those links? That’s where the real game begins. Not all vendors in the market offer complete data coverage. With Scrapingdog’s powerful Web Scraping API, customers can directly scrape the content inside those links listed on SERP and complete their data workflow for research purposes.&lt;/p&gt;

&lt;p&gt;Pricing comparison head-to-head:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs81abu2d46u6s8ymjvcp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs81abu2d46u6s8ymjvcp.png" alt=" " width="610" height="234"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Performance (our test results):&lt;br&gt;
For LITE Search:&lt;/p&gt;

&lt;p&gt;Avg response time: 1.6sec, 2.4sec (p95)&lt;br&gt;
Success rate on Google SERP: 100%&lt;br&gt;
For normal advanced search:&lt;/p&gt;

&lt;p&gt;Avg response time: 2.7sec, 3.5sec (p95)&lt;br&gt;
Success rate on Google SERP: 100%&lt;br&gt;
Code example — migrating from SearchAPI.io to Scrapingdog:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import requests

# SearchAPI.io (current code)
def search_searchapi(query, location="United States"):
    response = requests.get(
        "https://www.searchapi.io/api/v1/search",
        params={
            "engine": "google",
            "q": query,
            "location": location,
            "api_key": "YOUR_SEARCHAPI_KEY"
        }
    )
    return response.json()


# Scrapingdog (drop-in replacement)
def search_scrapingdog(query, country="us"):
    response = requests.get(
        "https://api.scrapingdog.com/google",
        params={
            "api_key": "YOUR_SCRAPINGDOG_KEY",
            "query": query,
            "results": 10,
            "country": country,
            "language": "en"
        }
    )
    return response.json()

// Node.js - SearchAPI.io to Scrapingdog migration

// SearchAPI.io (old)
const searchSearchAPI = async (query) =&amp;gt; {
  const params = new URLSearchParams({
    engine: "google",
    q: query,
    api_key: process.env.SEARCHAPI_KEY
  });
  const res = await fetch(`https://www.searchapi.io/api/v1/search?${params}`);
  return res.json();
};
// Scrapingdog (new)
const searchScrapingdog = async (query) =&amp;gt; {
  const params = new URLSearchParams({
    api_key: process.env.SCRAPINGDOG_KEY,
    query: query,
    results: 10,
    country: "us"
  });
  const res = await fetch(`https://api.scrapingdog.com/google?${params}`);
  return res.json();
};
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Response schema mapping:
&lt;/h2&gt;

&lt;p&gt;Both APIs return structured JSON. The field names differ slightly:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SearchAPI.io field Scrapingdog field organic_results[] organic_data[] organic_results[].link organic_data[].link organic_results[].snippet organic_data[].snippet related_questions[] peopleAlsoAsk[] related_searches[] related_searches[] knowledge_graph knowledge_graph ai_overview ai_overview (dedicated endpoint)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Migration typically takes a minute; the schema is close enough that it’s a field rename exercise, not a rewrite.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why choose Scrapingdog over SearchAPI.io:
&lt;/h2&gt;

&lt;p&gt;5x cheaper at comparable volumes&lt;br&gt;
True PAYG, in which credits don’t expire — pay for what you use.&lt;br&gt;
10x more generous free tier, which covers web scraping and SERP APIs(1,000 credits vs. 100)&lt;br&gt;
Faster responses from the API&lt;br&gt;
A detailed output response coverin every inch of information from HTML.&lt;br&gt;
Higher concurrency limit, allowing you to scrape even large number of results in a short period of time.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. SerpAPI — Best for Maximum Engine Coverage
&lt;/h2&gt;

&lt;p&gt;Starting price: $75/month for 5,000 searches ($15/1K)&lt;br&gt;
Free tier: 100 searches/month (ongoing)&lt;br&gt;
Best for: Teams that need 80+ search engines, the deepest feature set, and enterprise SLA&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3bgg8qlt8ewa5atsn00p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3bgg8qlt8ewa5atsn00p.png" alt=" " width="720" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.scrapingdog.com/blog/serpapi-vs-serper-vs-scrapingdog/" rel="noopener noreferrer"&gt;SerpAPI&lt;/a&gt; is the most established player in the SERP industry, having operated since 2017. It is backed by a strong portfolio of 100+ APIs, double the number offered by SearchAPI on its platform. If your project requires an enterprise-level of scraping, maximum output richness, SerpAPI can be the best implementation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where SerpAPI is clearly ahead of SearchAPI.io:
&lt;/h2&gt;

&lt;p&gt;80+ search engine APIs vs. SearchAPI.io’s ~50 — including Naver, DuckDuckGo, Yahoo, and niche engines SearchAPI.io doesn’t cover&lt;br&gt;
Ludicrous Speed mode — a premium low-latency option for real-time applications&lt;br&gt;
More comprehensive output parsing — sitelinks, dates, video carousels, discussion threads, event results, and inline images are all covered by SearchAPI, but SerpAPI tries to get you the most out of the page. They consider every piece of information as an important data point.&lt;/p&gt;

&lt;h2&gt;
  
  
  The honest tradeoff:
&lt;/h2&gt;

&lt;p&gt;SerpAPI is the most expensive option on this list by a significant margin, $15/1K at the Developer tier, $9/1K at the Big Data tier. For most teams, the 100+ engine coverage is more than they need, and they’re paying a premium for features they never use. SearchAPI.io already covers the search engines most projects actually need at roughly a third of the cost.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pricing Breakdown:
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzvbt3u3t0kd63kvav0ha.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzvbt3u3t0kd63kvav0ha.png" alt=" " width="607" height="233"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  When to choose SerpAPI over SearchAPI.io:
&lt;/h2&gt;

&lt;p&gt;You need multi-engine APIs.&lt;br&gt;
You’re already integrated on SerpAPI’s SDK, and the migration cost exceeds the price premium&lt;br&gt;
Budget is not a primary constraint&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Serper.dev — Best for Speed + Budget at Google-Only Scale
&lt;/h2&gt;

&lt;p&gt;Starting price: $50 for 50,000 searches (~$1/1K)&lt;br&gt;
Free tier: 2,500 searches (most generous free tier on this list)&lt;br&gt;
Best for: Google-only workflows at high volume where response time is critical&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3ptxelefavhnxxa27qlp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3ptxelefavhnxxa27qlp.png" alt=" " width="720" height="399"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.scrapingdog.com/blog/best-alternatives-to-serper-api/" rel="noopener noreferrer"&gt;Serper.dev&lt;/a&gt; is the fastest option on this list, with an average response time of nearly 1 second, driven by a lightweight architecture optimised for a single search engine. If your use case is Google-only and latency is the primary metric, Serper is hard to beat.&lt;/p&gt;

&lt;p&gt;However, it is worth noting that Serper only covers the Google LITE page, not the current normal one. It has only 12 APIs in its portfolio, which all target different pages of Google and not any other search engine. But the product is still worth its price.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where Serper wins over SearchAPI.io:
&lt;/h2&gt;

&lt;p&gt;Speed — consistently the fastest real-time SERP API in independent testing&lt;br&gt;
Price — $1/1K is 2–4x cheaper than SearchAPI.io at equivalent tiers&lt;br&gt;
Free tier — 2,500 searches vs. SearchAPI.io’s 100. You can properly evaluate Serper before paying&lt;br&gt;
Simple pricing — flat rate, easy to predict&lt;/p&gt;

&lt;h2&gt;
  
  
  When to choose Serper.dev over SearchAPI.io:
&lt;/h2&gt;

&lt;p&gt;You only need Google (no Bing, YouTube, or Amazon data)&lt;br&gt;
Response time is the most important metric for your use case&lt;br&gt;
You want the most generous free tier to evaluate before paying&lt;br&gt;
Volume is high, and you need the best cost per search&lt;/p&gt;

&lt;h2&gt;
  
  
  4. DataForSEO — Best for Bulk SEO Workflows
&lt;/h2&gt;

&lt;p&gt;Starting price: ~$60 per 100K searches (async queue)&lt;br&gt;
Free tier: $1 credit&lt;br&gt;
Best for: SEO agencies, rank trackers, and keyword intelligence platforms running bulk queries.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyufwbp8z0uco196difud.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyufwbp8z0uco196difud.png" alt=" " width="720" height="399"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.scrapingdog.com/blog/best-serp-apis/" rel="noopener noreferrer"&gt;DataForSEO&lt;/a&gt; operates on a fundamentally different model from SearchAPI.io and the other providers on this list. Rather than a synchronous request-response API (submit a query, get results in 2–5 seconds), DataForSEO uses a task queue system: you submit queries in batches and retrieve results when they’re ready, which can take sometime depending on the number of queries submitted.&lt;/p&gt;

&lt;p&gt;The setup may sound like a downside for real-time applications. But it is not, for SEO firms running large keyword tracking, weekly site audits, async processing is what they need instead of real-time data, which helps them significantly drive the cost lower at scale.&lt;/p&gt;

&lt;p&gt;Why DataForSEO costs less:&lt;br&gt;
The async model lets DataForSEO optimise server utilisation across time zones, batching similar queries and avoiding redundant requests. The Standard Queue is the cheapest tier; the Live API (real-time) costs more but is still significantly cheaper than SearchAPI.io.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pricing at scale comparison:
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhk4t2lo3uqc06jvbeh1e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhk4t2lo3uqc06jvbeh1e.png" alt=" " width="602" height="187"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Beyond SERP — DataForSEO’s broader data platform:
&lt;/h2&gt;

&lt;p&gt;DataForSEO isn’t just a SERP API. It also provides keyword difficulty scores, search volume data, backlink indexes, on-page SEO data, and SERP feature tracking. If you’re building an SEO product and need SERP data alongside keyword intelligence, DataForSEO is a one-stop shop that SearchAPI.io isn’t.&lt;/p&gt;

&lt;h2&gt;
  
  
  When to choose DataForSEO over SearchAPI.io:
&lt;/h2&gt;

&lt;p&gt;Your workload is batch/async — not real-time&lt;br&gt;
Volume is high (100K+ queries/month), and cost is the primary constraint&lt;br&gt;
You need keyword research and backlink data alongside SERP results&lt;br&gt;
You’re building an SEO platform, not a real-time consumer application&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Bright Data — Best Enterprise Data Platform
&lt;/h2&gt;

&lt;p&gt;Starting price: Custom (contact sales)&lt;br&gt;
Free tier: Trial only&lt;br&gt;
Best for: Enterprise organisations with compliance requirements and global geo-targeting needs&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7128vmey8p7hn8xy0gbf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7128vmey8p7hn8xy0gbf.png" alt=" " width="720" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Bright Data is the biggest player in this whole web scraping market. They have a huge network of 150M+ IPs across 195 countries, which is the largest in the industry. And they have not sourced their IPs from any third-party provider, but they completely own their IPs, which gives them supreme flexibility in organising across their platform.&lt;/p&gt;

&lt;p&gt;Bright Data can be expensive for small-to-medium scale enterprises, and the platform complexity makes the onboarding difficult. However, the super-large infrastructure makes their API super scalable in the market. It has various capabilities wrt to captcha solving technologies, browser fingerprinting, which most others can’t even match in the market.&lt;/p&gt;

&lt;h2&gt;
  
  
  What makes Bright Data genuinely different:
&lt;/h2&gt;

&lt;p&gt;150M+ IP coverage — residential, datacenter, ISP, and mobile IPs across 195 countries. For geo-specific SERP data (local SEO, country-specific search results), this is unmatched.&lt;br&gt;
Compliance documentation — SOC 2, GDPR, and CCPA paperwork that enterprise procurement requires.&lt;br&gt;
Dedicated account management — a real human who knows your workload.&lt;/p&gt;

&lt;h2&gt;
  
  
  When to choose Bright Data over SearchAPI.io:
&lt;/h2&gt;

&lt;p&gt;Enterprise scale with compliance requirements&lt;br&gt;
Geo-targeting at a granularity (city, ISP, carrier-level) that smaller providers can’t support&lt;br&gt;
You need SERP as part of a broader web data strategy&lt;/p&gt;

&lt;h2&gt;
  
  
  Head-to-Head: Scrapingdog vs. SearchAPI.io
&lt;/h2&gt;

&lt;p&gt;Since this is the comparison most readers are here for, here’s the detailed breakdown:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F286oawp60x4f3ma117le.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F286oawp60x4f3ma117le.png" alt=" " width="606" height="736"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The hourly rate limit in practice:
&lt;/h2&gt;

&lt;p&gt;SearchAPI.io limits you to 20% of your monthly credits per hour. On the $40/month entry plan, that works out to roughly 800–1,000 searches per hour maximum. If your pipeline is bursty, a batch job that runs at 2am across 5,000 URLs before the business day starts — you’ll be throttled mid-run even with credits remaining. Scrapingdog has no hourly cap. You can burn 10,000 credits in an hour if your workload demands it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Which Alternative Should You Choose?
&lt;/h2&gt;

&lt;p&gt;All the providers mentioned in the list have one of the &lt;a href="https://www.scrapingdog.com/blog/best-web-scraping-apis/" rel="noopener noreferrer"&gt;best web scraping services&lt;/a&gt; in the market. Scrapingdog and DataForSEO are known for a scalable API at low market prices, SerpAPI and BrightData are known for enterprise-scale volume, and Serper is known for its cheap and fast API in the market.&lt;br&gt;
You should thoroughly test out all the vendors to be sure about the service, to know if the API would be a good value at scale. Factors such as concurrency, pricing, support and data coverage should be considered before taking a long-term decision.&lt;/p&gt;

&lt;h2&gt;
  
  
  Frequently Asked Question
&lt;/h2&gt;

&lt;h2&gt;
  
  
  Is there a free alternative to SearchAPI.io?
&lt;/h2&gt;

&lt;p&gt;Yes, Scrapingdog provides you 100 free credits on registering on its platform without requiring a credit card. Serper and SerpAPI also offer a free tier with 2500 and 100 API calls, respectively. For genuinely free at higher volume, DataForSEO provides $1 in credit with no card required.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is the cheapest SearchAPI.io alternative?
&lt;/h2&gt;

&lt;p&gt;At 100K+ or 1M+ search volumes, Scrapingdog stands out as the most economical option among the competitors, providing services at a cost roughly 5x cheaper than SearchAPI at comparable volumes. DataForSEO’s Standard Queue is cheaper still for async/batch workloads that don’t need real-time results.&lt;/p&gt;

&lt;h2&gt;
  
  
  Does Scrapingdog cover the same endpoints as SearchAPI.io?
&lt;/h2&gt;

&lt;p&gt;Scrapingdog covers 25+ &lt;a href="https://www.scrapingdog.com/google-apis/" rel="noopener noreferrer"&gt;APIs of Google&lt;/a&gt;, and has a total portfolio of 70+ APIs on its platform. It covers all the APIs offered by SearchAPI, including Google, Bing, YouTube, and Amazon, with a powerful General web scraping API that allows you to complete your data workflow and get all the information from a single platform.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;SearchAPI is a great product and a highly scalable SERP API, backed by genuine strengths such as a 99.9% SLA, ZeroTrace mode, and 35+ APIs, which earn it a strong place in the market.&lt;/p&gt;

&lt;p&gt;However, for the majority of developers, it is quite expensive compared to competitors offering the same or even better quality services. Plus, the 20% per-hour cap adds operational friction that other providers do not have.&lt;/p&gt;

&lt;p&gt;Scrapingdog offers the best combination of pricing, Google endpoint breadth, PAYG flexibility, and a free tier large enough to properly evaluate the service before spending anything.&lt;/p&gt;

&lt;p&gt;For developers and enterprises reading this article, Scrapingdog provides great flexibility while also being far more economical at scale, maintaining a 100% success rate with unmatched speed in the market. Additionally, the wide range of APIs covered by Scrapingdog gives customers the advantage of accessing all their data through a single platform.&lt;/p&gt;

&lt;p&gt;Test it free with 1,000 credits at &lt;a href="https://www.scrapingdog.com/" rel="noopener noreferrer"&gt;scrapingdog.com&lt;/a&gt;. No credit card required!&lt;/p&gt;

</description>
    </item>
    <item>
      <title>How to Scrape Google Search Results with Node.js</title>
      <dc:creator>Darshan Khandelwal</dc:creator>
      <pubDate>Tue, 05 May 2026 13:20:02 +0000</pubDate>
      <link>https://dev.to/darshan_sd/how-to-scrape-google-search-results-with-nodejs-1k05</link>
      <guid>https://dev.to/darshan_sd/how-to-scrape-google-search-results-with-nodejs-1k05</guid>
      <description>&lt;p&gt;Google Search is one of the most valuable sources of publicly available data, from SERP rankings and competitor analysis to keyword research and lead generation. But scraping it is not straightforward. Google actively blocks bots, changes its HTML structure, and heavily relies on JavaScript rendering.&lt;/p&gt;

&lt;p&gt;In this guide, you’ll learn how to scrape Google Search results using &lt;a href="https://nodejs.org/en" rel="noopener noreferrer"&gt;Node.js&lt;/a&gt; and later with the &lt;a href="https://www.scrapingdog.com/google-serp-api/" rel="noopener noreferrer"&gt;Google SERP API&lt;/a&gt;. If you prefer Python, check out our guide on &lt;a href="https://www.scrapingdog.com/blog/scrape-google-search-results/" rel="noopener noreferrer"&gt;scraping Google Search with Python&lt;/a&gt;. &lt;/p&gt;

&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;p&gt;If you’re short on time or already understand the scraping logic, you can simply copy this code and use it in your environment.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;axios&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;axios&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;params&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;api_key&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;your-api-key&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;query&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;what is scraping?&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;country&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;us&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;advance_search&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;true&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;domain&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;google.com&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="nx"&gt;axios&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="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://api.scrapingdog.com/google&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;params&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&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;catch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Error:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;message&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;Don’t forget to use your own API key.&lt;/p&gt;

&lt;h2&gt;
  
  
  Challenges of Scraping Google Search
&lt;/h2&gt;

&lt;p&gt;Bot Detection — Google fingerprints requests using IP reputation, request headers, and behavioral patterns.&lt;br&gt;
JavaScript Rendering — Results are JS-rendered, so raw HTTP libraries like Axios return incomplete HTML. A full browser environment is required.&lt;br&gt;
CAPTCHA — Suspicious traffic triggers CAPTCHA, which becomes a major blocker at scale.&lt;br&gt;
Frequent DOM Changes — Google updates its HTML structure without notice, breaking selectors regularly.&lt;br&gt;
IP Blocking — High request volumes from a single IP get it banned fast. Proxy rotation is almost mandatory.&lt;br&gt;
Geo-Restricted Results — SERPs vary by location, so region-specific scraping requires geo-targeted proxies.&lt;/p&gt;
&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;p&gt;Before getting started, make sure you have the following:&lt;/p&gt;

&lt;p&gt;Node.js (v18 or above) and npm installed on your machine. If you are new to JavaScript scraping, you can first read our guide on &lt;a href="https://www.scrapingdog.com/blog/javascript-web-scraping/" rel="noopener noreferrer"&gt;web scraping with Node.js&lt;/a&gt;.&lt;br&gt;
&lt;a href="https://playwright.dev/" rel="noopener noreferrer"&gt;Plawright&lt;/a&gt; for rendering the Google search page. You can install it with the command npm install playwright.&lt;br&gt;
&lt;a href="https://www.npmjs.com/package/axios" rel="noopener noreferrer"&gt;Axios&lt;/a&gt; for making an HTTP connection with the host website. You can install it with the command npm install axios.&lt;br&gt;
&lt;a href="https://www.npmjs.com/package/cheerio" rel="noopener noreferrer"&gt;Cheerio&lt;/a&gt; for parsing the raw HTML. Cheerio can be installed via npm install cheerio.&lt;br&gt;
A &lt;a href="https://www.scrapingdog.com/" rel="noopener noreferrer"&gt;Scrapingdog&lt;/a&gt; API key. You can get this by signing up for the trial pack.&lt;/p&gt;
&lt;h2&gt;
  
  
  Method 1: Scraping Google Search with Playwright and Cheerio
&lt;/h2&gt;

&lt;p&gt;First, we will fetch the raw HTML using Playwright. Then, we will parse that HTML using Cheerio. If you want to learn the basics of Playwright first, check out our guide on &lt;a href="https://www.scrapingdog.com/blog/playwright-web-scraping-nodejs/" rel="noopener noreferrer"&gt;web scraping with Playwright&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;For this tutorial, we will scrape this &lt;a href="https://www.google.com/search?q=spaceX" rel="noopener noreferrer"&gt;page&lt;/a&gt; from Google.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq937ymbi3bdrwfddxuh1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq937ymbi3bdrwfddxuh1.png" alt=" " width="720" height="628"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;chromium&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;playwright&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;cheerio&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;cheerio&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;scrapeGoogleSearch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;query&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;browser&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;chromium&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;launch&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;headless&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;channel&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;chrome&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;page&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;browser&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;newPage&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setViewportSize&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1920&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1080&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;

   &lt;span class="c1"&gt;// Navigate to search results&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;searchUrl&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;`https://www.google.com/search?q=&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;query&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;amp;gl=us&amp;amp;hl=en`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;goto&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;searchUrl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;waitUntil&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;domcontentloaded&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;html&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;content&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;browser&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;close&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;html&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Run&lt;/span&gt;
&lt;span class="nf"&gt;scrapeGoogleSearch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;spaceX&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;results&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;results&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="p"&gt;}).&lt;/span&gt;&lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Here is what the code is doing:
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Launch a real Chrome browser- Playwright launches an actual Chrome instance (channel: 'chrome') with headless: false, meaning the browser runs visibly. This avoids the bot detection that headless mode often triggers.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Open a new page and set viewport- A new browser tab is created and the viewport is set to 1920×1080, a standard desktop resolution that mimics a real user.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Build the search URL and navigate- The query is embedded into a standard Google Search URL with gl=us&amp;amp;hl=en to lock results to English (US). Playwright navigates to it and waits until the DOM is loaded.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Extract the full page HTML- Once the page is rendered, page.content() grabs the complete HTML including all JS-rendered content — something raw HTTP libraries cannot do.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Close the browser and return HTML- The browser is closed cleanly and the raw HTML is returned.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyai7j3q1qoxto9p9jeql.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyai7j3q1qoxto9p9jeql.png" alt=" " width="720" height="829"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you see this after running the code, then it means your Playwright setup is working.&lt;/p&gt;

&lt;p&gt;Parsing with Cheerio&lt;br&gt;
We will parse three things:&lt;/p&gt;

&lt;p&gt;Title&lt;br&gt;
Description&lt;br&gt;
Link&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhw8j6d9leo0zh3x9z94z.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhw8j6d9leo0zh3x9z94z.png" alt=" " width="720" height="278"&gt;&lt;/a&gt;&lt;br&gt;
The title is wrapped inside the h3 element with the class LC20lb.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgktaet1np4rovb5d8smx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgktaet1np4rovb5d8smx.png" alt=" " width="720" height="137"&gt;&lt;/a&gt;&lt;br&gt;
The description is wrapped inside the div tag with the class VwiC3b.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffac687nusvvtixwu8dti.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffac687nusvvtixwu8dti.png" alt=" " width="720" height="155"&gt;&lt;/a&gt;&lt;br&gt;
The link is wrapped inside a tag with the class zReHs.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fykak5zh0tsxcj4dc5s3d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fykak5zh0tsxcj4dc5s3d.png" alt=" " width="720" height="449"&gt;&lt;/a&gt;&lt;br&gt;
The entire page is wrapped inside a div container with id search.&lt;/p&gt;

&lt;p&gt;According to the information gathered above, the Cheerio logic will be:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;$&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;cheerio&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;load&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;html&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;results&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[];&lt;/span&gt;

&lt;span class="nf"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;#search .tF2Cxc&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;each&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;el&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;title&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;el&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;find&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;h3.LC20lb&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;first&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;text&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;link&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;el&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;find&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;a.zReHs&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;first&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;attr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;href&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;description&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;el&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;find&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;div.VwiC3b&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;first&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;text&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;title&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;link&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;results&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;title&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;link&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;description&lt;/span&gt; &lt;span class="p"&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;return&lt;/span&gt; &lt;span class="nx"&gt;results&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After running the complete code, you get this output:&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="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"title"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"SpaceX"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"link"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://spacex.com/"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"SpaceX's Starship spacecraft and Super Heavy rocket is a fully reusable transportation system designed to carry both crew and cargo to Earth orbit, the Moon, ..."&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;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"title"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"SpaceX"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"link"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://en.wikipedia.org/wiki/SpaceX"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"SpaceX was founded by Elon Musk in 2002 with a vision of decreasing the costs of space launches, paving the way to a self-sustaining colony on Mars. In 2008, ...Read more"&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;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"title"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"SpaceX (@spacex) • Instagram photos and videos"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"link"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://www.instagram.com/spacex/"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"17M followers · 3 following · 996 posts · @spacex: “SpaceX designs, manufactures and launches the world's most advanced rockets and spacecraft”"&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;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;h2&gt;
  
  
  Complete Code
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;chromium&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;playwright&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;cheerio&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;cheerio&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;scrapeGoogleSearch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;query&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;browser&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;chromium&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;launch&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;headless&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;channel&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;chrome&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;page&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;browser&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;newPage&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setViewportSize&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1920&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1080&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;


  &lt;span class="c1"&gt;// Navigate to search results&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;searchUrl&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;`https://www.google.com/search?q=spaceX&amp;amp;gl=us&amp;amp;hl=en`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;goto&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;searchUrl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;waitUntil&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;domcontentloaded&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;


  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;html&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;content&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;browser&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;close&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

  &lt;span class="c1"&gt;// Parse results with Cheerio&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;$&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;cheerio&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;load&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;html&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;results&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[];&lt;/span&gt;

  &lt;span class="nf"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;div#search .tF2Cxc&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;each&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;el&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;title&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;el&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;find&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;h3.LC20lb&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;first&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;text&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;link&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;el&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;find&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;a.zReHs&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;first&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;attr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;href&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;description&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;el&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;find&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;div.VwiC3b&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;first&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;text&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;title&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;link&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;results&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;title&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;link&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;description&lt;/span&gt; &lt;span class="p"&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;return&lt;/span&gt; &lt;span class="nx"&gt;results&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Run&lt;/span&gt;
&lt;span class="nf"&gt;scrapeGoogleSearch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;spaceX&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;results&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;results&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="p"&gt;}).&lt;/span&gt;&lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Method 2: Scraping Google Search with Scrapingdog
&lt;/h2&gt;

&lt;p&gt;The approach above works well if you’re scraping a few hundred pages. But once you scale to thousands or millions of pages, a Playwright + Cheerio setup starts to break down. Here, we’ll use a &lt;a href="https://www.scrapingdog.com/google-serp-api/" rel="noopener noreferrer"&gt;Google SERP API&lt;/a&gt; that handles the hard parts for us, including proxies, headers, and browser management.&lt;/p&gt;

&lt;p&gt;Here, we will use Axios to make the GET request to the Scrapingdog’s Google SERP API.&lt;/p&gt;

&lt;p&gt;Want to see the full workflow in action? Watch this video tutorial to learn how to Scrape Google Search Results with Node.js &amp;amp; Scrapingdog’s Google SERP API&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/mBGw2tFADXw"&gt;
  &lt;/iframe&gt;
&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;axios&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;axios&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;scrapeGoogleSearch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;query&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;axios&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="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://api.scrapingdog.com/google&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;params&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;api_key&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;YOUR_API_KEY&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;query&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;query&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;results&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;country&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;us&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;results&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;organic_results&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;title&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;link&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;link&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;snippet&lt;/span&gt;
  &lt;span class="p"&gt;}));&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;results&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;scrapeGoogleSearch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;web scraping tools&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;results&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;results&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="p"&gt;}).&lt;/span&gt;&lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;As you can see, with Scrapingdog, we only had to make a simple GET request. There was no need to manage a browser or write custom parsing logic. Running this code will produce a beautiful JSON response that contains every little detail, like Google Ads, AI overview, Video links, people also ask, etc.&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;"search_information"&lt;/span&gt;&lt;span class="p"&gt;:&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;span class="nl"&gt;"time_taken"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0.3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"total_results"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2110&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"query_displayed"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"spaceX"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"organic_results_state"&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 for exact spelling"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"original_query_yields_zero_results"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://www.google.com/search?q=spaceX&amp;amp;oq=spaceX&amp;amp;gl=us&amp;amp;hl=en&amp;amp;sourceid=chrome&amp;amp;ie=UTF-8"&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;span class="nl"&gt;"peopleAlsoAskedFor"&lt;/span&gt;&lt;span class="p"&gt;:&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;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"question"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Is SpaceX fully owned by Elon Musk?"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"rank"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&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;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"question"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Can I buy stock in SpaceX?"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"rank"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&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;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"question"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"What is the real purpose of SpaceX?"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"rank"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&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;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"question"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"What's the average salary of a SpaceX employee?"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"rank"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&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;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"organic_results"&lt;/span&gt;&lt;span class="p"&gt;:&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;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"title"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"SpaceX"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"link"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://spacex.com/"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"displayed_link"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://spacex.com"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"favicon"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAAAAABXZoBIAAAA10lEQVR4Ad2QIQiEQBBFfweDxXrNds1qsJoslu1mk71tEOxBMG41W8yb7WzcaBeEvRkXRLy7zt1LH97O/mHwO6TK4AvVsjkHhPXEdNEpgrgjs+uUc7c6QhdeRUVPatUlPJVma2VMWSh6us01ThLFdq2QK0thkSGuSOuMTHrDb4YMN0SbimXjbhHgnYHV3uMDpXGEzVKZ40Yodx5b0Fhnm9up/LYK2fH1EF+X0YdrAzx6y3EWp6t8XRP4ozrCSHjq9ZgT50G4fhufR984E9Nlx3qaiS7GH/ECeAedlKpi2RoAAAAASUVORK5CYII="&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"source"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"SpaceX"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"snippet"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"SpaceX's Starship spacecraft and Super Heavy rocket is a fully reusable transportation system designed to carry both crew and cargo to Earth orbit, the Moon, ..."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"highlighted_keywords"&lt;/span&gt;&lt;span class="p"&gt;:&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;span class="s2"&gt;"SpaceX's"&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;span class="nl"&gt;"extended_sitelinks"&lt;/span&gt;&lt;span class="p"&gt;:&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;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"title"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Launches"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"link"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://www.spacex.com/launches"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"snippet"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Home to SpaceX headquarters and one of the world's first ..."&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;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"title"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Careers"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"link"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://www.spacex.com/careers"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"snippet"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"SpaceX designs, manufactures and launches advanced rockets ..."&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;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"title"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Mission"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"link"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://www.spacex.com/mission"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"snippet"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"SpaceX designs, manufactures and launches advanced rockets ..."&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;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"title"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Starship"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"link"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://www.spacex.com/vehicles/starship"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"snippet"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Starship is the world's most powerful launch vehicle ever ..."&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;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"title"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Updates"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"link"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://www.spacex.com/updates"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"snippet"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"SpaceX designs, manufactures and launches advanced rockets ..."&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;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"rank"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"page_rank"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&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;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"title"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"SpaceX"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"link"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://en.wikipedia.org/wiki/SpaceX"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"displayed_link"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://en.wikipedia.org › wiki › SpaceX"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"favicon"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAAAAABXZoBIAAAAnklEQVR4AeTNIQiDQABG4b+u17X1aF6PK3YEO9iMJqPVau82y4FgMezS0oVLhqsHtrcqeqzDXv3CEz/6L4yTtZM3dnHmPTtjzXZAXKYVo4agkU2GI2Lloc6JDez1+flswMu1EQZ3xlE7lK8eKDkjtwE+crBMV+wesKmCiisGGepZIfQJpMj9SNb2MYWrChjVkULuCyCfRvsdmBieyQQAsoDk/9ryhFMAAAAASUVORK5CYII="&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"source"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Wikipedia"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"snippet"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"SpaceX was founded by Elon Musk in 2002 with a vision of decreasing the costs of space launches, paving the way to a self-sustaining colony on Mars. In 2008, ...Read more"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"highlighted_keywords"&lt;/span&gt;&lt;span class="p"&gt;:&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;span class="s2"&gt;"SpaceX"&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;span class="nl"&gt;"rank"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"page_rank"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&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;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"title"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"SpaceX (@spacex) • Instagram photos and videos"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"link"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://www.instagram.com/spacex/"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"displayed_link"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"17.1M+ followers"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"favicon"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAMAAABF0y+mAAABcVBMVEVHcEx3GPlwGPx1FvyDC/OWBumqA+K+AeDQANvVAs7rDa7jAtfoAMflAriKGP2ZCvunAvLEG/TgV9/oZt72G8nxB8nxALCKHPymGf7Pg/H86vf////zds79AcD9ALT3DZ30t+j63fP1st31quT8AKf8AJn98/jaO973Lr38AIvAAOz8Drn4V7370PHiGe34E6n7HZv9AHv5wOP1Wpr8D5H9AGz9GYX6q8r2YKL5dZP3tMT8D2/8KW31Y5f9AV/9Inn+G17+KFf3v879J0f+MUf5g2v3wbr9Nyz6RUP9Ml/9Qxr+SjX7zcr6Gkb8AEL+UQ/9Wiv98uT70rD8XQT8ZxD9ZCr40sP4Tn/9cAz+egj9ciX1km/1X1L9O0j4nD7+hAT9hRb8fh34unb9jQT3jZX73a78dwX+mwL6ymPzoZD8YSf9qAD+sQD7wBL8zEn5tV79jwb+uAD+vgH+wwD+LHP8owX+ygD6Olj7rQz+twf8UjMSMf5jAAAAe3RSTlMAW9L////////FW///2P///////////8b/////////xf///////////////////////////v/////////////////////////////////////////////////////////////////F////W////f//2f///9fY/9hbxcXA5ZvtAAACBUlEQVR4AUTPRaLkNhSF4f9IV3Kp/JjfCzMzM8xCG8lWMs9SsoIkTdNmZubiKtvqduMnZl0BkgCBEI+zhiBwD5f0ZA3wQj1Eu1YiMZQADyAA9SRXgpCEaGXcODFKoq/NEXRHXYmnshMak0xdGC/PiO1Mi1rTbA0LyM/BOOWyuISrHyLPTRoKZDaBndvoQrezQA/IWlBe6DXCsOdgong+bdCLyzW5F3VzpY7TckLH4ESRlvsbNlj2V4DNu3klk/Ed8HUvYlVKwa4NSmedWzNX1dbUcxlzsJMgxNppsywKv6l5M9YJZtizxOfObknxVOkVaAblle1BB0JNssXaJhA05tlKMOrcIXcMSOBc8IBvqzbQZC8SjIfMwxxz0iLnn0vQS+cx7ye0nPcPT7qPBmk2my7b4A0XlmiNzEMDQfD53vLF6sigLHLGMyzBCMzaawXf/HcAPqpmvqbDq5dGlQVjlexMYvqD0C3P+iVOccGBM0L1+d6uYozzRc6TbvA3/cI0r7g4dgoKy/SCee+akH32ltf38muG0kzR+PUfPl+DHq1in3jnSp8ZtjAxgz+u7OUJfb51cmk0Tqf158QwgcQUmM5zy9+tqnr9+nCf+3seU4hFCKHsptStxoEQg4fPhp7dP1dB8u6+LFzjqOq6afof/IWH/38O40irXXZ1g2+q99K9TWBgAACS27uoe/IOhgAAAABJRU5ErkJggg=="&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"source"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Instagram · spacex"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"snippet"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"17M followers · 3 following · 996 posts · @spacex: “SpaceX designs, manufactures and launches the world's most advanced rockets and spacecraft”"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"highlighted_keywords"&lt;/span&gt;&lt;span class="p"&gt;:&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;span class="s2"&gt;"spacex"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"SpaceX"&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;span class="nl"&gt;"rank"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"page_rank"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&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;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"title"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"SpaceX"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"link"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://www.youtube.com/spacex"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"displayed_link"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"6.8M+ followers"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"favicon"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAcElEQVR4AWP4//8/RZh6BgCZAkDsAMUNWDFCXgDFACCV8J/B+D8pGKwHRAKRAUyQDEMMQAYEUGBAAsiABpwKHjz4/9/BAZ8BDXgNgIMNGyg04MABkg1AeCEgAK8XKA5EiqORooSELykXEJuUBz43AgAIA1ZhBoG9vwAAAABJRU5ErkJggg=="&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"source"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"YouTube · SpaceX"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"snippet"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"SpaceX designs, manufactures and launches the world's most advanced rockets and spacecraft. ...more SpaceX designs, manufactures and launches the world's ...Read more"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"highlighted_keywords"&lt;/span&gt;&lt;span class="p"&gt;:&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;span class="s2"&gt;"SpaceX designs, manufactures and launches the world's most advanced rockets and spacecraft"&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;span class="nl"&gt;"rank"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"page_rank"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&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;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"title"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"SpaceX (@SpaceX) / Posts / X"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"link"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://x.com/SpaceX"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"displayed_link"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"41.6M+ followers"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"favicon"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAAAAABXZoBIAAAA/0lEQVR4AbXPIazCMACE4d+L2qoZFEGSIGcRc/gJJB5XMzGJmK9EN0HMi+qaibkKVF1txdQe4g0YzPK5yyWXHL9TaPNQ89LojH87N1rbJcXkMF4Fk31UMrf34hm14KUeoQxGArALHTMuQD2cAWQfJXOpgTbksGr9ng8qluShJTPhyCdx63POg7rEim95ZyR68I1ggQpnCEGwyPicw6hZtPEGmnhkycqOio1zm6XuFtyw5XDXfGvuau0dXHzJp8pfBPuhIXO9ZK5ILUCdSvLYMpc6ASBtl3EaC97I4KaFaOCaBE9Zn5jUsVqR2vcTJZO1DdbGoZryVp94Ka/mQfE7f2T3df0WBhLDAAAAAElFTkSuQmCC"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"source"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"X · SpaceX"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"snippet"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"SpaceX (@SpaceX) - Posts - SpaceX designs, manufactures and launches the world's most advanced rockets and spacecraft | X (formerly Twitter)"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"highlighted_keywords"&lt;/span&gt;&lt;span class="p"&gt;:&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;span class="s2"&gt;"SpaceX"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"SpaceX"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"SpaceX"&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;span class="nl"&gt;"rank"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"page_rank"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;5&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;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"relatedSearches"&lt;/span&gt;&lt;span class="p"&gt;:&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;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"query"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Spacex news"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"link"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://www.google.com/search?gl=us&amp;amp;q=Spacex+news"&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;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"query"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Spacex falcon heavy launch"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"link"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://www.google.com/search?gl=us&amp;amp;q=Spacex+falcon+heavy+launch"&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;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"query"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"SpaceX owner"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"link"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://www.google.com/search?gl=us&amp;amp;q=SpaceX+owner"&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;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"query"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"SpaceX launch"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"link"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://www.google.com/search?gl=us&amp;amp;q=SpaceX+launch"&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;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"query"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"SpaceX Starship"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"link"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://www.google.com/search?gl=us&amp;amp;q=SpaceX+Starship"&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;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"query"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"SpaceX stock"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"link"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://www.google.com/search?gl=us&amp;amp;q=SpaceX+stock"&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;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"query"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"SpaceX careers"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"link"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://www.google.com/search?gl=us&amp;amp;q=SpaceX+careers"&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;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"query"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"SpaceX IPO"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"link"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://www.google.com/search?gl=us&amp;amp;q=SpaceX+IPO"&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;span class="p"&gt;]&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;h2&gt;
  
  
  How to Handle Pagination?
&lt;/h2&gt;

&lt;p&gt;To scrape all the pages from Google, you can use the page parameter from Scrapingdog. You can read more about it in the &lt;a href="https://docs.scrapingdog.com/google-search-api-documentation#pagination" rel="noopener noreferrer"&gt;documentation&lt;/a&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;scrapeMultiplePages&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;query&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;pages&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;allResults&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[];&lt;/span&gt;

  &lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;pages&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;axios&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="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://api.scrapingdog.com/google&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;params&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;api_key&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;YOUR_API_KEY&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;query&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;query&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;results&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;country&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;us&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;page&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;

    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;results&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;organic_results&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt;
      &lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;title&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;link&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;link&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;snippet&lt;/span&gt;
    &lt;span class="p"&gt;}));&lt;/span&gt;

    &lt;span class="nx"&gt;allResults&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(...&lt;/span&gt;&lt;span class="nx"&gt;results&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;allResults&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;scrapeMultiplePages&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;web scraping tools&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;results&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Total results: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;results&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;results&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="p"&gt;}).&lt;/span&gt;&lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With this approach, pagination is just incrementing the page parameter; no browser delays, no block risk, no extra complexity.&lt;/p&gt;

&lt;h2&gt;
  
  
  Parsing Different Result Types
&lt;/h2&gt;

&lt;p&gt;The Scrapingdog API response contains much more than just organic results. Here’s how to parse each result type from the JSON:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Organic Result
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;organic&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;organic_results&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;rank&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;rank&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;title&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;link&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;link&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;snippet&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;snippet&lt;/span&gt;
&lt;span class="p"&gt;}));&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Organic Results:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;organic&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;People Also Ask
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;paa&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;peopleAlsoAskedFor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;item&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;rank&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;rank&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;question&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;question&lt;/span&gt;
&lt;span class="p"&gt;}));&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;People Also Ask:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;paa&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Related Searches
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;related&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;relatedSearches&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;item&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;query&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;query&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;link&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;link&lt;/span&gt;
&lt;span class="p"&gt;}));&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Related Searches:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;related&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Sitelinks (only on top branded results)
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;topResult&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;organic_results&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="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;topResult&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;extended_sitelinks&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;sitelinks&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;topResult&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;extended_sitelinks&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;s&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;title&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;link&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;link&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;snippet&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;snippet&lt;/span&gt;
  &lt;span class="p"&gt;}));&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Sitelinks:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;sitelinks&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;ol&gt;
&lt;li&gt;Search Metadata
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;meta&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;search_information&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Query: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;meta&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;query_displayed&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Total Results: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;meta&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;total_results&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Time Taken: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;meta&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;time_taken&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;s`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The advantage of the Scrapingdog API is that all these result types come back in a single structured response, no need to write separate CSS selectors for each one or worry about Google changing its DOM structure.&lt;/p&gt;

&lt;p&gt;Export the scraped data to CSV&lt;br&gt;
Node.js has a built-in fs module so no extra dependencies are needed for this step.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;fs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;fs&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;axios&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;axios&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;convertToCSV&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;results&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;headers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Rank&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Title&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Link&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Snippet&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;rows&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;results&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;r&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="nx"&gt;r&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;rank&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s2"&gt;`"&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;r&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;title&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;replace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sr"&gt;/"/g&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;""&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt;&lt;span class="s2"&gt;"`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;r&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;link&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s2"&gt;`"&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;r&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;snippet&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;replace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sr"&gt;/"/g&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;""&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt;&lt;span class="s2"&gt;"`&lt;/span&gt;
  &lt;span class="p"&gt;]);&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;,&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;rows&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;row&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;row&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;,&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;))].&lt;/span&gt;&lt;span class="nf"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="dl"&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;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;scrapeAndExport&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;query&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;axios&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="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://api.scrapingdog.com/google&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;params&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;api_key&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;YOUR_API_KEY&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;query&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;query&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;results&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;country&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;us&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;results&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;organic_results&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;r&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;rank&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;r&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;rank&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;r&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;title&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;link&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;r&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;link&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;snippet&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;r&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;snippet&lt;/span&gt;
  &lt;span class="p"&gt;}));&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;csv&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;convertToCSV&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;results&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;filename&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;query&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;replace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sr"&gt;/&lt;/span&gt;&lt;span class="se"&gt;\s&lt;/span&gt;&lt;span class="sr"&gt;+/g&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;_&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt;&lt;span class="s2"&gt;_results.csv`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="nx"&gt;fs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;writeFileSync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;filename&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;csv&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;utf8&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Saved &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;results&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; results to &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;filename&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;scrapeAndExport&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;spaceX&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once you run this code, you will find a CSV file inside the folder.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;In this guide, we covered two ways to scrape Google Search results with Node.js: Playwright and the Scrapingdog API. Playwright is good for low-volume testing and learning, but breaks easily at scale due to Google’s aggressive bot detection and frequent DOM changes.&lt;/p&gt;

&lt;p&gt;For production use, the Scrapingdog’s Google SERP API is the clear winner. It handles proxies, CAPTCHA, and browser fingerprinting for you, returning clean, structured JSON with organic results, People Also Ask, sitelinks, and pagination in a single call, so you can focus on using the data rather than fighting to get it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Frequently Asked Questions
&lt;/h2&gt;

&lt;h2&gt;
  
  
  Is scraping Google Search results legal?
&lt;/h2&gt;

&lt;p&gt;Scraping public Google data is legal. For commercial use at scale, using an API like Scrapingdog is the safer route.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why does my scraper get blocked so quickly?
&lt;/h2&gt;

&lt;p&gt;Google detects bots through IP reputation, request frequency, and browser fingerprinting. Without proxy rotation and human-like behavior, even a few requests will trigger a block.&lt;/p&gt;

&lt;h2&gt;
  
  
  Can I scrape Google Search results for free?
&lt;/h2&gt;

&lt;p&gt;Yes, using Playwright or Puppeteer, but you’ll hit blocks fast without proxies. Scrapingdog offers a free tier to get started without any infrastructure setup.&lt;/p&gt;

&lt;h2&gt;
  
  
  How many results can I scrape per page?
&lt;/h2&gt;

&lt;p&gt;Google returns 10 results per page by default. You can paginate using the page parameter page=0 for page 1, page=1 for page 2, and so on.&lt;/p&gt;

&lt;h2&gt;
  
  
  Do I need to parse HTML when using the Scrapingdog API?
&lt;/h2&gt;

&lt;p&gt;No. The API returns structured JSON directly, so there’s no need to write CSS selectors or worry about Google changing its DOM structure.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbqsowyamyv1brx46ci0y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbqsowyamyv1brx46ci0y.png" alt=" " width="720" height="189"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>How to Scrape ChatGPT with Python</title>
      <dc:creator>Darshan Khandelwal</dc:creator>
      <pubDate>Wed, 22 Apr 2026 11:46:53 +0000</pubDate>
      <link>https://dev.to/darshan_sd/how-to-scrape-chatgpt-with-python-375</link>
      <guid>https://dev.to/darshan_sd/how-to-scrape-chatgpt-with-python-375</guid>
      <description>&lt;p&gt;&lt;a href="https://chatgpt.com/" rel="noopener noreferrer"&gt;ChatGPT&lt;/a&gt; has become one of the most used AI platforms on the internet. Developers, researchers, and marketers are increasingly interested in extracting ChatGPT responses at scale. Whether to track what ChatGPT says about their brand, build AI monitoring pipelines, or power LLM-based research workflows.&lt;/p&gt;

&lt;p&gt;The problem? Scraping ChatGPT manually is painful. It requires browser automation, anti-bot bypass logic, session management, and handling dynamic content, all of which break frequently as OpenAI updates its platform.&lt;/p&gt;

&lt;p&gt;In this guide, you will learn how to scrape ChatGPT with Python and Scrapingdog’s ChatGPT Scraper API, a dedicated solution that handles all the complexity for you, so you can extract ChatGPT responses with a single API call.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Scrape ChatGPT?
&lt;/h2&gt;

&lt;p&gt;Most people use ChatGPT interactively, but querying it programmatically at scale unlocks real business value. Here’s why developers and companies do it:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmerllnj9rdpjx4rpf7iy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmerllnj9rdpjx4rpf7iy.png" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Brand &amp;amp; AI Visibility Monitoring — Many users ask ChatGPT for recommendations instead of Googling. Scraping lets you track whether ChatGPT mentions your brand or your competitors.&lt;/p&gt;

&lt;p&gt;AI Response Research — Study LLM behavior, bias, or hallucinations by collecting responses to hundreds of prompts systematically.&lt;/p&gt;

&lt;p&gt;Competitor Intelligence — You can query ChatGPT about competitor products, pricing, and features, and combine it with structured product data from APIs like Amazon Scraper API to validate what ChatGPT recommends against real-time pricing and listings.&lt;/p&gt;

&lt;p&gt;Training Data &amp;amp; Benchmarking — Use ChatGPT responses as reference data when fine-tuning or benchmarking your own models.&lt;/p&gt;

&lt;p&gt;Automated Content Pipelines — Feed ChatGPT responses into enrichment or summarization workflows without manual copy-pasting.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Is Scrapingdog’s ChatGPT Scraper API?
&lt;/h2&gt;

&lt;p&gt;Scrapingdog has recently launched a dedicated ChatGPT Scraper API . You just have to pass a query/prompt to the API and in return you will get clean, structured JSON, without dealing with any of the underlying browser automation or anti-bot complexity.&lt;/p&gt;

&lt;p&gt;Key features:&lt;br&gt;
Submit any prompt and get ChatGPT’s response back as structured data&lt;br&gt;
No browser automation required .&lt;br&gt;
Handles Cloudflare restrictions.&lt;br&gt;
Supports concurrent requests for high-volume workflows&lt;br&gt;
Returns clean JSON output ready for downstream processing&lt;br&gt;
Python-friendly with simple requests integration&lt;br&gt;
This means you can focus entirely on your data pipeline, not on fighting OpenAI’s anti-scraping stack.&lt;/p&gt;

&lt;p&gt;Prerequisites&lt;br&gt;
Before you start, make sure you have:&lt;/p&gt;

&lt;p&gt;Python 3.8+ installed&lt;br&gt;
A Scrapingdog account with an API key.&lt;br&gt;
The requests library installed:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;requests
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That’s it. No &lt;a href="https://playwright.dev/python/" rel="noopener noreferrer"&gt;Playwright&lt;/a&gt;, no Selenium, no proxy configuration required.&lt;/p&gt;

&lt;h2&gt;
  
  
  Scraping ChatGPT with Python
&lt;/h2&gt;

&lt;p&gt;Let’s start with the simplest possible example by sending a single prompt to ChatGPT and printing the response.&lt;/p&gt;

&lt;p&gt;We will start from the dashboard.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl7ysctt41zbucwdlfmz2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl7ysctt41zbucwdlfmz2.png" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once you pass the query/prompt in the scraper you will get a ready to use python code.&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="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;

&lt;span class="n"&gt;api_key&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;your-api-key&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://api.scrapingdog.com/chatgpt&lt;/span&gt;&lt;span class="sh"&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;api_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;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;prompt&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;What are the best web scraping tools in 2026?&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;response&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="n"&gt;url&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="n"&gt;params&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;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;status_code&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;response&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;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&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;Request failed with status code: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;status_code&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This code sends a prompt to Scrapingdog’s ChatGPT Scraper API and prints the response.&lt;/p&gt;

&lt;p&gt;Here’s the flow:&lt;/p&gt;

&lt;p&gt;Sets up credentials — your API key and the endpoint URL.&lt;br&gt;
Defines params — the API key and the prompt you want to send to ChatGPT.&lt;br&gt;
Makes a GET request — sends the prompt to the API via requests.get().&lt;br&gt;
Handles the response — if successful (status 200), parses and prints the JSON response; otherwise prints the error code.&lt;br&gt;
Once you run this code you get this JSON response.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhxfjt6frkg1arl5qp8mx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhxfjt6frkg1arl5qp8mx.png" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The response has two main fields:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;conversation A structured array containing the full exchange — your prompt (user) and ChatGPT’s reply (assistant). The assistant’s response is broken down into typed content blocks:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;paragraph — introductory or descriptive text&lt;br&gt;
heading — section titles (e.g., “AI-Powered Scraping Tools”)&lt;br&gt;
bullet_list — tools listed under each category with their strengths and best-use cases&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;markdown The exact same response, but as a raw markdown string — useful if you want to render it directly in a UI or blog without parsing the structured JSON.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;
  
  
  Parsing the API Response
&lt;/h2&gt;

&lt;p&gt;The response contains structured content blocks inside conversation[-1]["response"]. Here’s how to handle each block type — paragraph, heading, and bullet_list and extract clean text from them.&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="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;

&lt;span class="n"&gt;API_KEY&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;your_scrapingdog_api_key&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;ENDPOINT&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://api.scrapingdog.com/chatgpt&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;


&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;parse_response_blocks&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;blocks&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;list&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;
    Parse the assistant&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;s structured response blocks into plain text.
    Handles: paragraph, heading, bullet_list
    &lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
    &lt;span class="n"&gt;lines&lt;/span&gt; &lt;span class="o"&gt;=&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;block&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;blocks&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;block_type&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;block&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;type&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;block_type&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;paragraph&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;lines&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;block&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;text&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="p"&gt;))&lt;/span&gt;
            &lt;span class="n"&gt;lines&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="sh"&gt;""&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;# blank line after paragraph
&lt;/span&gt;
        &lt;span class="k"&gt;elif&lt;/span&gt; &lt;span class="n"&gt;block_type&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;heading&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;level&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;block&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;level&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="n"&gt;prefix&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;#&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;level&lt;/span&gt;
            &lt;span class="n"&gt;lines&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="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;prefix&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;block&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;text&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="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;lines&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="sh"&gt;""&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="k"&gt;elif&lt;/span&gt; &lt;span class="n"&gt;block_type&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;bullet_list&lt;/span&gt;&lt;span class="sh"&gt;"&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;item&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;block&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;span class="n"&gt;heading&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;item&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;heading&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="p"&gt;)&lt;/span&gt;
                &lt;span class="n"&gt;text&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;item&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;text&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="p"&gt;)&lt;/span&gt;
                &lt;span class="c1"&gt;# Skip duplicate sub-items (heading-only entries like "Strengths:", "Best for:")
&lt;/span&gt;                &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;text&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;heading&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Strengths:&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;Best for:&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
                    &lt;span class="n"&gt;lines&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="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;- **&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;heading&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;**: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;heading&lt;/span&gt; &lt;span class="k"&gt;else&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;- &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;text&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;lines&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="sh"&gt;""&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;lines&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;query_chatgpt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;
    Query ChatGPT via Scrapingdog and return a parsed result dict.
    &lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
    &lt;span class="n"&gt;response&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="n"&gt;ENDPOINT&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;api_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;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;prompt&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;prompt&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;90&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;response&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="n"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;response&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="c1"&gt;# Extract the assistant turn (always the last in the conversation)
&lt;/span&gt;    &lt;span class="n"&gt;assistant_turn&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;conversation&lt;/span&gt;&lt;span class="sh"&gt;"&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="n"&gt;response_blocks&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;assistant_turn&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;response&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;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;prompt&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;conversation&lt;/span&gt;&lt;span class="sh"&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="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;message&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;markdown&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;data&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;markdown&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="p"&gt;),&lt;/span&gt;         &lt;span class="c1"&gt;# pre-rendered markdown string
&lt;/span&gt;        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;parsed_text&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;parse_response_blocks&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response_blocks&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;  &lt;span class="c1"&gt;# custom parsed text
&lt;/span&gt;        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;raw_blocks&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;response_blocks&lt;/span&gt;                 &lt;span class="c1"&gt;# original structured blocks
&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;__name__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;__main__&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;query_chatgpt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;What are the best web scraping tools in 2026?&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Prompt:&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;prompt&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;--- Parsed Text ---&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;parsed_text&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;

    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;--- Markdown (pre-rendered) ---&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;markdown&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;][:&lt;/span&gt;&lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;...&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;# preview first 500 chars
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Extracting Specific Block Types
&lt;/h2&gt;

&lt;p&gt;If you only need specific content, for example just the headings to build a table of contents or just the bullet points, you can filter the blocks directly:&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="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;extract_headings&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;blocks&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;list&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;list&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;
    &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;Return all heading texts from the response.&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;text&lt;/span&gt;&lt;span class="sh"&gt;"&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;b&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;blocks&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;b&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;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;heading&lt;/span&gt;&lt;span class="sh"&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;extract_bullet_items&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;blocks&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;list&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;list&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;
    &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;Return all bullet list items across all bullet_list blocks.&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
    &lt;span class="n"&gt;items&lt;/span&gt; &lt;span class="o"&gt;=&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;block&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;blocks&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;block&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;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;bullet_list&lt;/span&gt;&lt;span class="sh"&gt;"&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;item&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;block&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;span class="c1"&gt;# Filter out sub-label duplicates
&lt;/span&gt;                &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;item&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;text&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;item&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;heading&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Strengths:&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;Best for:&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
                    &lt;span class="n"&gt;items&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;item&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;items&lt;/span&gt;


&lt;span class="c1"&gt;# Usage
&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;query_chatgpt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;What are the best web scraping tools in 2026?&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;blocks&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;raw_blocks&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Sections:&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;extract_headings&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;blocks&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Tools mentioned:&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="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;heading&lt;/span&gt;&lt;span class="sh"&gt;"&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;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;extract_bullet_items&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;blocks&lt;/span&gt;&lt;span class="p"&gt;)])&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Real-World Use Cases
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Brand Monitoring on ChatGPT- Track what ChatGPT says about your company across different question angles:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;brand_prompts&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;What is Scrapingdog?&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;What are the best web scraping APIs?&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;Is Scrapingdog a good tool for web scraping?&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;What alternatives are there to Scrapingdog?&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;What do people say about Scrapingdog?&lt;/span&gt;&lt;span class="sh"&gt;"&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;batch_query_chatgpt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;brand_prompts&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Schedule this to run weekly or daily and compare the markdown responses over time to see how your ChatGPT visibility changes.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Competitor Research
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;competitor_prompts&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;Compare Scrapingdog vs Brightdata for web scraping&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;What is the cheapest web scraping API in 2025?&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;Which scraping API has the best Google SERP support?&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;What are developers saying about Apify vs Scrapingdog?&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="n"&gt;competitor_data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;batch_query_chatgpt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;competitor_prompts&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;SEO &amp;amp; AI Visibility Research– As ChatGPT increasingly influences user decisions, knowing whether your content surfaces in its responses is critical. Pair this with Google Search Result Scraper to compare your rankings across both Google and ChatGPT simultaneously:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;seo_prompts&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;Best Python tutorial sites in 2025&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;Where can I learn web scraping online?&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;Top blogs about Python and data engineering&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="n"&gt;seo_visibility&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;batch_query_chatgpt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;seo_prompts&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Check if your brand appears in the markdown response
&lt;/span&gt;&lt;span class="n"&gt;your_brand&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;scrapingdog&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;seo_visibility&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;mentioned&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;your_brand&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;lower&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;markdown&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;lower&lt;/span&gt;&lt;span class="p"&gt;()&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;Prompt: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;prompt&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="mi"&gt;50&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="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;Mentioned: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt; YES&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;mentioned&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt; NO&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Note: You should also use the &lt;a href="https://www.scrapingdog.com/google-news-scraper-api/" rel="noopener noreferrer"&gt;Google News Scraping API&lt;/a&gt; to monitor your brand's mentions on the Internet.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Takeaways:
&lt;/h2&gt;

&lt;p&gt;DIY scraping of ChatGPT is fragile — Cloudflare protection, streaming responses, and frequent UI changes make browser automation an unreliable approach for production use.&lt;br&gt;
The API returns structured blocks, not plain text — responses come as typed content blocks (paragraph, heading, bullet_list) plus a pre-rendered markdown field; parse accordingly.&lt;br&gt;
Use markdown for simplicity, raw_blocks for control — if you just need the text, grab data["markdown"]; if you need to extract headings or bullet items individually, iterate over conversation[-1]["response"].&lt;br&gt;
Brand and AI visibility monitoring is the killer use case — as users shift from Google to ChatGPT for recommendations, tracking whether ChatGPT mentions your product is becoming as important as tracking your Google rankings.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Scraping ChatGPT manually is possible but fragile, browser automation breaks with every OpenAI update, session management is tedious, and handling streaming responses adds significant complexity.&lt;/p&gt;

&lt;p&gt;Scrapingdog’s ChatGPT Scraper API eliminates all of that. With a single API call, you get ChatGPT’s response in clean JSON, ready to process in Python. Whether you’re building a brand monitoring pipeline, running AI research at scale, or tracking how ChatGPT talks about your product, this approach is production-ready from day one.&lt;/p&gt;

&lt;h2&gt;
  
  
  Frequently Asked Questions
&lt;/h2&gt;

&lt;p&gt;Is scraping ChatGPT legal?&lt;br&gt;
In this article, whatever we scraped was available publicly. Scrapingdog does not scrape anything that is behind a login screen.&lt;/p&gt;

&lt;p&gt;Why not use the OpenAI API directly?&lt;br&gt;
The OpenAI API generates responses; it doesn’t reflect what ChatGPT’s web interface says with web search enabled. Plus, scraping ChatGPT with Scrapingdog is almost 15x cheaper than using the API.&lt;/p&gt;

&lt;p&gt;Will the API break when OpenAI updates its UI?&lt;br&gt;
No. Scrapingdog maintains the underlying infrastructure, so UI changes on OpenAI’s end are handled on their side; your code stays untouched.&lt;/p&gt;

&lt;p&gt;Can I use this with async Python?&lt;br&gt;
Yes. Wrap the requests calls with httpx and asyncio for concurrent scraping.&lt;/p&gt;

&lt;p&gt;What does the API return?&lt;br&gt;
A conversation array (structured content blocks per turn) and a markdown field (full response as a ready-to-use Markdown string). See Scrapingdog’s docs for the full schema.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>How to scrape Google AI Overviews using Python</title>
      <dc:creator>Darshan Khandelwal</dc:creator>
      <pubDate>Fri, 13 Feb 2026 09:44:18 +0000</pubDate>
      <link>https://dev.to/darshan_sd/how-to-scrape-google-ai-overviews-using-python-34hn</link>
      <guid>https://dev.to/darshan_sd/how-to-scrape-google-ai-overviews-using-python-34hn</guid>
      <description>&lt;p&gt;&lt;a href="https://search.google/ways-to-search/ai-overviews/" rel="noopener noreferrer"&gt;Google’s AI Overviews&lt;/a&gt; are changing how search results are displayed, delivering AI-generated summaries at the very top of the SERP. While these responses are helpful for users, they’re tricky to capture programmatically.&lt;/p&gt;

&lt;p&gt;Whether you’re analyzing your brand presence, tracking how Google summarizes answers, or just experimenting with AI-generated content, scraping these overviews can unlock powerful insights.&lt;/p&gt;

&lt;p&gt;In this tutorial, I will show you how you can scrape AI overviews from Google search using Python and Scrapingdog’s Google Search API.&lt;/p&gt;

&lt;h2&gt;
  
  
  What are AI Overviews?
&lt;/h2&gt;

&lt;p&gt;AI Overviews are Google’s experimental feature that uses generative AI to answer search queries directly at the top of the search results page.&lt;/p&gt;

&lt;p&gt;Instead of just showing blue links, Google summarizes information from various websites into a concise, natural-language response, often citing sources underneath.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F14rhgregxleof62nohq3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F14rhgregxleof62nohq3.png" alt=" " width="800" height="300"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Google introduced this feature in May 2024, initially for users in the United States. It was later rolled out to other countries as well. Currently, AI Overviews are available only in English, though Google may expand language support in the future.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Scrape Google AI Overviews?
&lt;/h2&gt;

&lt;p&gt;Google’s AI Overviews are transforming how people consume information. Instead of relying completely on blue links, users now get AI-generated answers at the very top of search results, often without clicking anything.&lt;/p&gt;

&lt;p&gt;This shift presents both a challenge and an opportunity.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frnqqwgfsbz7ziqqptfci.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frnqqwgfsbz7ziqqptfci.png" alt=" " width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here’s why scraping AI Overviews matters:&lt;/p&gt;

&lt;p&gt;📢 Track Brand Mentions&lt;br&gt;
Know when your brand (or your competitor’s) is referenced in Google’s AI responses, even if you’re not ranking #1 organically.&lt;/p&gt;

&lt;p&gt;🧠 Understand Search Intent Better&lt;br&gt;
AI Overviews often reflect Google’s best guess at user intent. Scraping them gives you a window into how Google “thinks”.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8toelwjm85it94wkddft.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8toelwjm85it94wkddft.png" alt=" " width="800" height="306"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;But in the past, many answers from AI overviews have raised eyebrows too, and that made people question the reliability of AI-generated summaries and highlighted the need for better accuracy verification before deploying these features at scale.&lt;/p&gt;

&lt;p&gt;✍️ Content &amp;amp; SEO Research&lt;br&gt;
Identify what types of answers Google prefers, what sources it cites, and how it summarizes complex topics. Since AI overviews reduce organic traffic, it becomes necessary for any brand to appear in AI overviews.&lt;/p&gt;

&lt;p&gt;🔍 Competitive Intelligence&lt;br&gt;
Learn which companies or products consistently show up in AI-generated summaries and why. AI overviews have changed how this intelligence is gathered and how it impacts the overall SEO industry.&lt;/p&gt;
&lt;h2&gt;
  
  
  Why use Scrapingdog for scraping AI overviews?
&lt;/h2&gt;

&lt;p&gt;Scraping AI Overviews isn’t easy, and they don’t appear on every search. They’re dynamically rendered, and they’re often wrapped in JavaScript-heavy containers. Traditional scrapers break. Headless browsers are slow and expensive.&lt;/p&gt;

&lt;p&gt;That’s where Scrapingdog’s Google Search API stands out:&lt;/p&gt;

&lt;p&gt;⚡ Fast &amp;amp; Scalable: Avoid setting up your own browsers and proxies. Scrapingdog handles that useless stuff so that you keep collecting the data at scale without hassle.&lt;/p&gt;

&lt;p&gt;📦 Includes Source Attribution: Extracts citations, reference links, and summary text from the AI Overview box.&lt;/p&gt;

&lt;p&gt;🔁 Works with All Search Parameters: Supports pagination, country targeting, device type, and more.&lt;/p&gt;

&lt;p&gt;🧪 Great for Experiments &amp;amp; Monitoring: Track when Overviews appear, how they change, and which sites are cited.&lt;/p&gt;

&lt;p&gt;Whether you’re building a dashboard to monitor brand mentions in Overviews or analyzing how AI rewrites search content, Scrapingdog gives you a reliable, high-speed way to access this data that too without browser automation and proxy setup nightmares.&lt;/p&gt;

&lt;p&gt;Prerequisite&lt;br&gt;
Python 3.x should be available on your machine. If not, then you can download it from here.&lt;br&gt;
Install requests library for making HTTP connections with the API.&lt;br&gt;
Account on Scrapingdog. You will get 1000 free credits on signup.&lt;/p&gt;
&lt;h2&gt;
  
  
  How to Scrape AI Overviews
&lt;/h2&gt;

&lt;p&gt;To scrape Google AI overviews, you have to pass a sample query to Scrapingdog’s Google Search API. For this tutorial, we are going to use the query what is AI overview. The Google search page will look like this for this query.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbd33ojyr2bvznepom1wg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbd33ojyr2bvznepom1wg.png" alt=" " width="800" height="441"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now, pass the query to the Google Search Scraper Playground.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frzpsxcrrjc4u3qapgowu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frzpsxcrrjc4u3qapgowu.png" alt=" " width="800" height="497"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As you can see in the above image, after typing the query in the input field, you will get a ready-to-use Python code. You can just copy this code and paste it into your Python file.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import requests

api_key = "your-api-key"
url = "https://api.scrapingdog.com/google"

params = {
    "api_key": api_key,
    "query": "what is AI overview",
    "country": "us",
    "advance_search": "true",
    "domain": "google.com"
}

response = requests.get(url, params=params)

if response.status_code == 200:
    data = response.json()
    print(data)
else:
    print(f"Request failed with status code: {response.status_code}")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Do not forget to use your own API key in the above code.&lt;/p&gt;

&lt;p&gt;Here’s a brief explanation of the code in points:&lt;/p&gt;

&lt;p&gt;API Configuration:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sets up the ScrapingDog API key for authentication&lt;/li&gt;
&lt;li&gt;Defines the endpoint URL (&lt;a href="https://api.scrapingdog.com/google" rel="noopener noreferrer"&gt;https://api.scrapingdog.com/google&lt;/a&gt;) for Google SERP scraping&lt;/li&gt;
&lt;li&gt;api_key: Your authentication credential from ScrapingDog&lt;/li&gt;
&lt;li&gt;query: The search term to scrape (“what is AI overview”)&lt;/li&gt;
&lt;li&gt;country: Target location for search results (US in this case)&lt;/li&gt;
&lt;li&gt;advance_search: Enables the extraction of AI Overviews and other advanced features.&lt;/li&gt;
&lt;li&gt;domain: Specifies which Google domain to scrape (google.com)&lt;/li&gt;
&lt;li&gt;Once you run this code, you will get this neat JSON response.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;AI overview response from Scrapingdog&lt;/p&gt;

&lt;p&gt;Within the JSON response, you will get an object ai_overview which will have the data from the AI overview section. Look pretty aesthetic, right?🔥&lt;/p&gt;

&lt;p&gt;Now, in some cases, you might not get this data. For example, check this JSON response from the Google Search API.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9918tct4n05sgpmrlt6w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9918tct4n05sgpmrlt6w.png" alt=" " width="800" height="147"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Handling the ScrapingDog AI overview Extension Link:&lt;/p&gt;

&lt;p&gt;When AI Overviews aren’t immediately available in the main response, ScrapingDog provides a fallback mechanism through the scrapingdog_link field.&lt;/p&gt;

&lt;p&gt;How It Works:&lt;/p&gt;

&lt;p&gt;The initial response may contain a url (original Google URL) and a scrapingdog_link (extension API endpoint)&lt;br&gt;
If the AI Overview is missing from the primary JSON response, use the scrapingdog_link to retrieve it&lt;br&gt;
Make a simple GET request to this link with no additional parameters needed&lt;br&gt;
The response will contain the AI Overview data in JSON format&lt;br&gt;
Critical Timing:&lt;/p&gt;

&lt;p&gt;⚠️ 60-Second Expiration: You must make the GET request to scrapingdog_link within 60 seconds of receiving it. After this window, the link expires and becomes invalid.&lt;/p&gt;

&lt;p&gt;Usage Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# If AI overview is not in main response
if 'scrapingdog_link' in data:
    extension_response = requests.get(data['scrapingdog_link'])
    ai_overview_data = extension_response.json()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This two-step approach ensures you can always capture AI Overviews, even when they require additional rendering time from Google’s servers.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Takeaways
&lt;/h2&gt;

&lt;p&gt;ScrapingDog’s SERP API simplifies the complex process of extracting AI Overviews by handling proxy management, anti-bot detection, and browser fingerprinting automatically&lt;br&gt;
The advance_search parameter unlocks rich SERP features, including AI Overviews, featured snippets, Ads and knowledge panels&lt;br&gt;
The two-step approach with scrapingdog_link ensures you never miss AI Overview data, even when it requires extended rendering time&lt;br&gt;
With just a few lines of Python code, you can monitor AI Overviews at scale for competitive analysis, content strategy, and SEO optimization&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Scraping Google AI Overviews has become essential for staying competitive in today’s SEO landscape. As Google continues to prioritize AI-generated content at the top of search results, understanding how your content appears or doesn’t appear in these overviews is crucial for visibility and traffic. With the help of Python and powerful SERP APIs from Scrapingdog, we were able to achieve our goal without the hassle of setting up a browser or proxy.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQs (Frequently Asked Questions)
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;What are Google AI Overviews?&lt;br&gt;
Google AI Overviews are AI-generated summaries displayed at the top of Google search results. They combine information from multiple websites and include source links.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Why are AI Overviews hard to scrape?&lt;br&gt;
AI Overviews are dynamically rendered using JavaScript and don’t appear for every query, making traditional HTML scrapers unreliable.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;How can I scrape Google AI Overviews using Python?&lt;br&gt;
You can scrape AI Overviews using Scrapingdog’s Google Search API by sending a search query and enabling advanced search features.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What can I use scraped AI Overviews for?&lt;br&gt;
Scraped AI Overviews can be used for SEO research, brand monitoring, and competitor analysis.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>ai</category>
      <category>python</category>
      <category>tutorial</category>
      <category>webscraping</category>
    </item>
  </channel>
</rss>
