# DataForSEO SERP API - Google Organic, Maps & News Results (`santhej/dataforseo-serp-api`) Actor

DataForSEO-powered SERP API. Scrape Google Organic, Google Maps and Google News results for any keywords as clean structured JSON. Set location, language, device and depth. Pay per SERP page — no DataForSEO account or subscription needed.

- **URL**: https://apify.com/santhej/dataforseo-serp-api.md
- **Developed by:** [Santhej Kallada](https://apify.com/santhej) (community)
- **Categories:** SEO tools, Developer tools, MCP servers
- **Features:** Limited permissions
- **Stats:** 26 total users, 8 monthly users, 95.7% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.00 / 1,000 serp pages

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## DataForSEO SERP API — Google Organic, Maps & News Results

**Get live Google Organic, Google Maps and Google News results for any keyword as clean JSON, powered by the DataForSEO SERP API. No DataForSEO account, no balance top-up, no subscription: you pay per 10 results through Apify.**

### What does the DataForSEO SERP API actor do?

It sends your keywords to the DataForSEO SERP API and returns one dataset row per search result, in Google's own ranking order. You choose the engine, country, language, device and how deep to go (up to 700 results per keyword).

- **Google Organic**: rank, result type, title, URL, domain and snippet. SERP features are kept too: the **AI Overview** text, **People Also Ask** questions and **related searches** arrive in the `description` column of their own rows.
- **Google Maps**: business name, rating, review count, category, address, phone, website and GPS coordinates.
- **Google News**: headline, publisher domain, URL, snippet, relative publish time ("11 hours ago") and an exact timestamp. Top-story clusters link to their lead article.
- Real Google results fetched live, with no proxies or captchas to manage.

### Use cases

- **Rank tracking**: check where your pages rank for a keyword set in any of 14 countries, on desktop or mobile.
- **SERP and competitor research**: see which vendors, review sites and listicles own page one for your category.
- **AI Overview monitoring**: read what Google's AI Overview says about your topic and which sources it links to.
- **Local SEO and lead lists**: pull the Google Maps pack for "dentist chicago" or any business type and city.
- **News monitoring**: track Google News coverage of a brand, competitor or topic.
- **AI agents and automations**: structured JSON that drops straight into n8n, Make, Zapier, MCP servers and LLM pipelines.

### How to use the DataForSEO SERP API

1. Enter one or more keywords in **Search queries** (up to 100 per run).
2. Pick the **Search engine**: Google Organic, Google Maps or Google News.
3. Set **Results depth** (10 = the first page), plus **Location**, **Language code** and **Device** if you need them.
4. Click **Start**. Each keyword takes a few seconds.
5. Download the results as JSON, CSV or Excel, or read them through the Apify API. The **Organic results**, **Google Maps places** and **Google News articles** views show the columns that matter for each engine.

#### Example input

```json
{
  "queries": ["best crm software", "crm for small business", "hubspot alternatives"],
  "engine": "google_organic",
  "resultsDepth": 10,
  "locationCode": "2840",
  "languageCode": "en",
  "device": "desktop"
}
```

Google Maps example:

```json
{
  "queries": ["dentist chicago", "emergency dentist chicago"],
  "engine": "google_maps",
  "resultsDepth": 20,
  "locationCode": "2840",
  "languageCode": "en"
}
```

#### Input configuration

| Field | Type | Default | Description |
|---|---|---|---|
| `queries` | array of strings | required | Keywords to search. Up to 100 per run; extra keywords are ignored. |
| `engine` | string | `google_organic` | `google_organic`, `google_maps` or `google_news`. |
| `resultsDepth` | integer | `10` | Results to request per keyword, 1 to 700. Billed per 10 (see pricing). Google can return fewer. |
| `locationCode` | string | `2840` (United States) | Country: United States, United Kingdom, Canada, Australia, India, Germany, France, Spain, Italy, Netherlands, Japan, Brazil, South Africa or United Arab Emirates. |
| `languageCode` | string | `en` | Two-letter language code, e.g. `en`, `de`, `fr`, `es`. |
| `device` | string | `desktop` | `desktop` or `mobile`. Used for Organic and News, ignored for Maps. |

#### Example output

Google Organic row:

```json
{
  "query": "best crm software",
  "engine": "google_organic",
  "type": "organic",
  "rank_absolute": 2,
  "title": "Choosing The Best CRM Software In 2026",
  "url": "https://www.salesforce.com/crm/best-crm/",
  "domain": "www.salesforce.com",
  "description": "Salesforce is consistently named the #1 CRM by IDC for providing world-class apps for every team..."
}
```

SERP-feature rows (`type` = `ai_overview`, `people_also_ask`, `related_searches`, ...) use the same fields. Their text is in `description`, and `title`/`url` are empty unless the feature links to a page.

Google Maps row:

```json
{
  "query": "dentist chicago",
  "engine": "google_maps",
  "type": "maps_search",
  "rank_absolute": 1,
  "title": "Chicago Dental Dream Team",
  "url": "http://www.dentaldreamteam.com/",
  "domain": "www.dentaldreamteam.com",
  "description": "820 E 87th St #201, Chicago, IL 60619",
  "rating": 4.9,
  "rating_count": 738,
  "address": "820 E 87th St #201, Chicago, IL 60619",
  "phone": "+1773-488-3738",
  "category": "Dental implants periodontist",
  "latitude": 41.7369797,
  "longitude": -87.6039206
}
```

Google News rows add `time_published` (as Google shows it, e.g. `"11 hours ago"`) and `timestamp` (e.g. `"2026-09-22 16:08:02 +00:00"`).

A run summary (queries, total results, billed units) is also saved to the run's key-value store as `OUTPUT`.

### How much does the DataForSEO SERP API cost?

Pay per event. The main event is a **SERP page**, and one SERP page is **10 requested results for one keyword**. A keyword at depth 10 is 1 unit, depth 20 is 2 units, depth 100 is 10 units. You are billed for the depth you request, even if Google returns fewer results.

| Event | Free / Bronze plan | Silver plan | Gold plan and above |
|---|---|---|---|
| Actor start (once per run) | $0.001 | $0.0009 | $0.0008 |
| SERP page (10 requested results per keyword) | $0.005 | $0.0045 | $0.004 |

**Minimum-request charge.** Every Google request carries a fixed backend fee. On shallow Organic and News searches (depth under 50), the per-10 price can come in under that fee, so the run adds a few extra SERP-page units. At depth 10 this works out to about $0.00625 per keyword instead of $0.005. Maps searches and deeper Organic/News searches are billed at the table price.

Worked examples (Free/Bronze prices, measured on real runs):

| Run | Units billed | Total |
|---|---|---|
| 3 Organic keywords, depth 10 | 3 + 1 minimum-request unit | $0.021 |
| 2 News keywords, depth 10 | 2 + 1 minimum-request unit | $0.016 |
| 2 Maps keywords, depth 20 | 4 | $0.021 |
| 10 Organic keywords, depth 100 | 100 | $0.501 |
| 100 Organic keywords, depth 10 | 100 + 25 minimum-request units | $0.626 |

There is no monthly fee and no DataForSEO subscription or minimum top-up.

### FAQ

**Do I need a DataForSEO account?**
No. The actor calls the DataForSEO SERP API with its own access, and you pay per SERP page through Apify.

**Which search engines and countries are supported?**
Google Organic, Google Maps and Google News, in the 14 countries listed in the Location dropdown.

**How many results can I get per keyword?**
Up to 700 with `resultsDepth`. 10 is the first page. You are billed per 10 requested results.

**Why do some Organic rows have no URL?**
Those are SERP features such as AI Overview, People Also Ask or related searches. Their content is in `description`, and `type` tells you which feature it is.

**Can I track rankings on a schedule?**
Yes. Save your input as a task and add an Apify schedule for daily or weekly runs.

**Is it good for AI agents, n8n or Make?**
Yes. The output is flat JSON with stable field names, which suits MCP servers, automations and LLM agents.

***

*Tags: dataforseo, dataforseo serp api, serp api, google serp api, google search api, google maps api, google news api, serp scraper, search results api, rank tracker api, seo api.*

# Actor input Schema

## `queries` (type: `array`):

One or more keywords / search queries to look up. One SERP page is fetched per query.

## `engine` (type: `string`):

Which Google SERP to scrape.

## `resultsDepth` (type: `integer`):

Number of results to return per query (max 700). 10 = first page.

## `locationCode` (type: `string`):

Geographic location for the search.

## `languageCode` (type: `string`):

Two-letter language code, e.g. 'en', 'es', 'de', 'fr'.

## `device` (type: `string`):

Device type for Organic and News results (ignored for Maps).

## Actor input object example

```json
{
  "queries": [
    "best crm software",
    "email marketing tools"
  ],
  "engine": "google_organic",
  "resultsDepth": 10,
  "locationCode": "2840",
  "languageCode": "en",
  "device": "desktop"
}
```

# Actor output Schema

## `dataset` (type: `string`):

One record per result item (organic, maps or news).

## `summary` (type: `string`):

Queries run, results returned, units billed and estimated charge.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "queries": [
        "best crm software",
        "email marketing tools"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("santhej/dataforseo-serp-api").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "queries": [
        "best crm software",
        "email marketing tools",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("santhej/dataforseo-serp-api").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "queries": [
    "best crm software",
    "email marketing tools"
  ]
}' |
apify call santhej/dataforseo-serp-api --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,santhej/dataforseo-serp-api"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/igQwnjLjm7ltfLmcJ/builds/YW9PHAetb1iNijeCz/openapi.json
