HELP CENTER

How to Test Google Web Scraping for Free with DataForSEO Sandbox

Testing a Google web scraping API usually costs money and developer hours before you know whether the data even fits your product. Our Sandbox takes that cost off the table: send requests to any of our APIs, get back responses with the same structure as production, and pay nothing while you build. By the end of this article you’ll know how to test Google web scraping for free in the Sandbox, then check the real data before you spend a cent.

Is there really a “free” Google web scraping API?

A quick reality check first. No provider scrapes Google indefinitely for free, and you should be wary of any that claims to. But two things genuinely are free at DataForSEO, and keeping them separate is the whole point.

The first is the DataForSEO Sandbox, a technical environment where you send requests to any endpoint and get back responses with structure identical to production, yet without your account being charged. The second is the free unlimited trial. When you sign up, you get a $1 credit on your balance to spend on a limited number of real API calls, but over an unlimited period.

The split matters because each path answers a different question. The Sandbox answers one, for free: does my code parse the response correctly? The trial credit answers the other: is the real Google data accurate for my keywords and locations? Build against the Sandbox first and you retire the integration risk before spending anything on the data risk. Past the trial, real data runs on pay-as-you-go pricing with no monthly subscriptions, so you can test the SERP API for free now and scale only when the feature earns it.

What the DataForSEO Sandbox is, and what it returns

The Sandbox is a free API testing environment for developers wiring their software up to our data. Any registered user gets access, and your account is never charged for Sandbox endpoints. It works across all of our APIs, including the SERP API, DataForSEO Labs API, and Backlinks API, so the same approach applies no matter which dataset your product needs.

One caveat: every successful Sandbox request returns the same sample response, and all the values in it are dummy data. The shape is what stays faithful. As our Sandbox best practices explain, the structure and fields of a Sandbox response match those of the real API response. Rate limits match production too: up to 2,000 API calls per minute, with a Standard POST holding up to 100 tasks and a Live POST holding one.

So the Sandbox is the right place to build and test everything that doesn’t depend on real values: your response parser, your queue, your storage schema, your postback_url or pingback_url handling. It’s the wrong place to judge data accuracy, latency, or location coverage. The values are placeholders, so a returned result tells you nothing about live Google data. That’s the boundary. Now the request itself.

How to run your first free Google SERP API request in the Sandbox

Setup is short. Create a free account, then open the API Access tab in the dashboard and copy your API login and password. The API password is generated automatically and isn’t the same as your account password. Then comes the only change from production: swap the hostname in your request URL from api.dataforseo.com/v3/ to sandbox.dataforseo.com/v3/. You don’t need to touch your code or POST data.

The snippet below sends one live request to the Sandbox mirror of the Google Organic SERP API endpoint. It authenticates with HTTP Basic auth using your Base64-encoded credentials, then posts a single keyword. Since it hits the Sandbox host, running it costs nothing.

# Instead of 'login' and 'password' use your credentials from https://app.dataforseo.com/api-access 
login="login" 
password="password" 
cred="$(printf ${login}:${password} | base64)"
# The only difference from production is the hostname: sandbox.dataforseo.com 
curl --location --request POST "https://sandbox.dataforseo.com/v3/serp/google/organic/live/advanced" 
--header "Authorization: Basic ${cred}"  
--header "Content-Type: application/json" 
--data-raw '[
    {
        "language_code": "en",
        "location_code": 2840,
        "keyword": "google web scraping api free"
    }
]'

Endpoint used: the Sandbox mirror of Google Organic Live Advanced.

The response comes back as a structured JSON object as in the example below, so the shape is easy to read:

{
  "version": "0.1.20260717",
  "status_code": 20000,
  "status_message": "Ok.",
  "time": "0 sec.",
  "cost": 0,
  "tasks_count": 1,
  "tasks_error": 0,
  "tasks": [
    {
      "id": "07271857-8284-0139-2000-e9f62f938c26",
      "status_code": 20000,
      "status_message": "Ok.",
      "time": "0 sec.",
      "cost": 0,
      "result_count": 1,
      "path": [
        "v3",
        "serp",
        "google",
        "organic",
        "live",
        "advanced"
      ],
      "data": {
        "api": "serp",
        "function": "live",
        "se": "google",
        "se_type": "organic",
        "device": "mobile",
        "language_name": "English",
        "location_name": "London,England,United Kingdom",
        "keyword": "rank checker"
      },
      "result": [
        {
          "keyword": "pizza",
          "type": "organic",
          "se_domain": "google.com",
          "location_code": 1006886,
          "language_code": "en",
          "check_url": "https://www.google.com/search?q=pizza&hl=en&gl=GB&ie=UTF-8&uule=w+CAIQIFISCXXeIa8LoNhHEZkq1d1aOpZS",
          "datetime": "2026-07-23 07:18:41 +00:00",
          "spell": null,
          "refinement_chips": null,
          "item_types": [
            "find_results_on",
            "local_pack",
            "organic",
            "people_also_ask",
            "related_searches",
            "knowledge_graph"
          ],
          "se_results_count": 1210000000,
          "pages_count": 1,
          "items_count": 17,
          "items": [
            {
              "type": "find_results_on",
              "rank_group": 1,
              "rank_absolute": 1,
              "page": 1,
              "position": "left",
              "xpath": "/html[1]/body[1]/div[3]/div[1]/div[12]/div[1]/div[2]/div[2]/div[1]/div[1]/div[1]/div[1]",
              "items": [
                {
                  "type": "find_results_on_element",
                  "title": "THE 10 BEST Pizza Places in London (Updated 2026)",
                  "domain": "www.tripadvisor.co.uk",
                  "url": "https://www.tripadvisor.co.uk/Restaurants-g186338-c31-London_England.html",
                  "source": "Tripadvisor"
                },
                {
                  "type": "find_results_on_element",
                  "title": "Pizza Delivery & Takeaway Near Me in London",
                  "domain": "www.just-eat.co.uk",
                  "url": "https://www.just-eat.co.uk/takeaway/london/pizza",
                  "source": "Just Eat"
                },
                {
                  "type": "find_results_on_element",
                  "title": "21 Best Pizza Restaurants in London",
                  "domain": "www.timeout.com",
                  "url": "https://www.timeout.com/london/restaurants/londons-best-restaurants-for-pizza",
                  "source": "Time Out"
                },
                {
                  "type": "find_results_on_element",
                  "title": "THE 10 BEST Pizza Takeaway in London 2026 - Order Pizza ...",
                  "domain": "www.ubereats.com",
                  "url": "https://www.ubereats.com/gb/category/london-eng/pizza",
                  "source": "ubereats"
                },
                {
                  "type": "find_results_on_element",
                  "title": "Pizza Takeaway and Delivery in London",
                  "domain": "deliveroo.co.uk",
                  "url": "https://deliveroo.co.uk/cuisines/pizza-takeaway/london",
                  "source": "deliveroo"
                }
              ],
              "rectangle": null
            },
            {
              "type": "local_pack",
              "rank_group": 1,
              "rank_absolute": 2,
              "page": 1,
              "position": "left",
              "xpath": "/html[1]/body[1]/div[3]/div[1]/div[12]/div[1]/div[2]/div[2]/div[1]/div[1]/div[2]/div[1]/div[1]/div[1]/div[1]/div[3]/div[1]/div[1]/div[1]/div[1]",
              "title": "Pizza Pilgrims Carnaby",
              "description": "11 Kingly St \nClosed · Opens 11:30 am \n\"The pizza dough was excellent — light, flavorful, and clearly well made.\" \n",
              "domain": null,
              "phone": null,
              "booking_url": null,
              "url": null,
              "is_paid": false,
              "rating": {
                "rating_type": "Max5",
                "value": 4.8,
                "votes_count": 16000,
                "rating_max": 5
              },
              "cid": "13464038642211587617",
              "rectangle": null
            },
            {
              "type": "local_pack",
              "rank_group": 2,
              "rank_absolute": 3,
              "page": 1,
              "position": "left",
              "xpath": "/html[1]/body[1]/div[3]/div[1]/div[12]/div[1]/div[2]/div[2]/div[1]/div[1]/div[2]/div[1]/div[1]/div[1]/div[1]/div[3]/div[1]/div[3]/div[1]/div[1]",
              "title": "Fatto a Mano Covent Garden",
              "description": "30 St Martin's Ln \nClosed · Opens 12 pm \n\"The crust, the sauce, and all of the toppings were exquisite.\" \n",
              "domain": null,
              "phone": null,
              "booking_url": null,
              "url": null,
              "is_paid": false,
              "rating": {
                "rating_type": "Max5",
                "value": 4.7,
                "votes_count": 1900,
                "rating_max": 5
              },
              "cid": "13311743875956888497",
              "rectangle": null
            },
            {
              "type": "local_pack",
              "rank_group": 3,
              "rank_absolute": 4,
              "page": 1,
              "position": "left",
              "xpath": "/html[1]/body[1]/div[3]/div[1]/div[12]/div[1]/div[2]/div[2]/div[1]/div[1]/div[2]/div[1]/div[1]/div[1]/div[1]/div[3]/div[1]/div[5]/div[1]/div[1]",
              "title": "Ecco Pizza",
              "description": "186 Drury Ln \n\"Perfectly cheesey, perfectly CRISPY, the pepperoni tasted BEAUTIFUL.\" \n",
              "domain": null,
              "phone": null,
              "booking_url": null,
              "url": null,
              "is_paid": false,
              "rating": {
                "rating_type": "Max5",
                "value": 4.5,
                "votes_count": 1000,
                "rating_max": 5
              },
              "cid": "10876421770465640473",
              "rectangle": null
            },
            {
              "type": "organic",
              "rank_group": 1,
              "rank_absolute": 5,
              "page": 1,
              "position": "left",
              "xpath": "/html[1]/body[1]/div[3]/div[1]/div[12]/div[1]/div[2]/div[2]/div[1]/div[1]/div[4]/div[1]/div[1]",
              "domain": "www.pizzapilgrims.co.uk",
              "title": "Pizza Pilgrims - Pizza Pilgrims",
              "url": "https://www.pizzapilgrims.co.uk/",
              "cache_url": null,
              "related_search_url": null,
              "breadcrumb": "https://www.pizzapilgrims.co.uk",
              "website_name": "Pizza Pilgrims",
              "is_image": false,
              "is_video": false,
              "is_featured_snippet": false,
              "is_malicious": false,
              "is_web_story": false,
              "description": "Pizza Pilgrims are serving up Neapolitan pizza in London, Brighton, Nottingham, Cambridge & Leeds. In crust we trust!",
              "pre_snippet": null,
              "extended_snippet": null,
              "images": null,
              "amp_version": false,
              "rating": null,
              "price": null,
              "highlighted": [
                "Pizza Pilgrims are serving up Neapolitan pizza"
              ],
              "links": null,
              "faq": null,
              "extended_people_also_search": null,
              "about_this_result": null,
              "related_result": null,
              "timestamp": null,
              "rectangle": null
            }
          ]
        }
      ]
    }
  ]
}

One more trick while you build. To see every SERP feature the endpoint can return, including featured snippets and AI Overviews, send a GET request to serp/google/organic/task_get/advanced/00000000-0000-0000-0000-000000000000 on the Sandbox host. That response includes all available item types with dummy data, so you can build your UI and parsing logic to handle each SERP element correctly.

Moving from Sandbox to real Google data

Going to production is a one-line change: swap the hostname back from sandbox.dataforseo.com to api.dataforseo.com. Your POST data and code stay exactly the same. That’s the payoff for building against the Sandbox first: the integration you tested for free is the one that now runs live.

Now spend the $1 trial credit on your own keywords and locations to check the data is accurate for your case. The Live method returns results in about 6 seconds on average, so a handful of real calls is enough to sanity-check coverage. Prefer to batch? The Standard queue runs at roughly 5 minutes on normal priority, or about 1 minute on high, and carries up to 100 keywords per request. Once you’re satisfied, top up your account and keep going on pay-as-you-go. There’s no monthly commitment tying you in.

The upshot is stability. Because only the base URL changes between environments, the feature you ship tends to hold steady after that one integration. You’re not rebuilding anything to go live; you’re flipping a hostname. If you want the fuller picture of what the live product covers, our SERP API handles desktop and mobile results across all Google locations.

Before you scale, though, a few best practices can help you avoid common pitfalls.

Common Sandbox testing mistakes

  1. Expecting the Sandbox to return real values. A Sandbox response looks like an actual full SERP, so it’s easy to assume the data is real and up-to-date. However, it isn’t. Every successful call returns the same dummy response. Treat Sandbox output as a schema to build against, and confirm accuracy later with the trial credit on real endpoints.
  2. Testing values instead of structure. Teams sometimes write assertions against specific titles, URLs, or positions. But when using Sandbox, those are placeholders and will change in production. Assert on field presence and types instead: does items contain organic entries with a rank_absolute? Don’t assert on the sample values themselves.
  3. Using the account password instead of the API password. The API password is generated automatically by DataForSEO and isn’t your dashboard login password, so the wrong one returns a 401. Copy your credentials from the API Access tab and you’re all set.
  4. Sending test requests to the production hostname. Not changing api.dataforseo.com to sandbox.dataforseo.com/v3/ in your base URL during testing spends real balance instead of hitting the free Sandbox. Keep the hostname in one config variable so you can flip between Sandbox and production in a single place.
  5. Spending the trial credit on uncontrolled test loops. Once you’re hitting real endpoints to check accuracy, a retry loop or a repeated batch can burn through the $1 credit fast. Cap your real calls or spending per API, and remember you can limit the number of duplicate tasks so the same accidental request isn’t billed twice.

Conclusion

Testing a Google web scraping API for free comes down to separating two kinds of risk. The Sandbox clears integration risk for free. The $1 trial credit clears data risk with a few real calls. Build against the Sandbox, move to production with a one-line hostname change, and you’ll have checked the whole path before spending anything. When you’re ready to send your first request, create an account to try our API for free.

Embed DataForSeo widget on your website


Embed code:
Preview: