# Yahoo Search Results Scraper (`datascraperes/yahoo-search-scraper`) Actor

Scrape Yahoo Search results for one or thousands of keywords. Get ranked organic results with titles, URLs, snippets, positions, country localization and pagination. Export clean data for SEO research, competitor analysis and search visibility monitoring.

- **URL**: https://apify.com/datascraperes/yahoo-search-scraper.md
- **Developed by:** [DataScraperES](https://apify.com/datascraperes) (community)
- **Categories:** SEO tools, Developer tools, Automation
- **Features:** Limited permissions
- **Stats:** 1 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.45 / 1,000 organic results

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

Collect structured Yahoo organic search results for one query or a large keyword list. **Get ranked URLs, titles, snippets, positions, country localization, and pagination in an export-ready Dataset.** The Actor is designed for SEO research, competitor monitoring, ranking checks, and search-market comparisons.

### What this Actor does

The Actor searches Yahoo for the keywords you provide and saves one Dataset item for each organic result it delivers. It normalizes and deduplicates the query list, applies the selected country localization, follows additional result pages when the requested depth requires them, resolves Yahoo tracking links to destination URLs, and records the page and global organic position for every item.

Runs can contain one keyword or thousands of unique keywords. Results are written incrementally, so a partial run still preserves the rows that were successfully delivered. The run summary reports requested and delivered counts, completed queries, partial queries, and result shortfalls. During execution, the Apify run status and log show the current query and page milestones and a clear terminal message. Complete searches finish with `Completed`; partial searches report the available results and shortfall.

### Use cases

- Track organic rankings across keywords, countries, and recurring research runs.
- Compare competitor visibility, destination URLs, titles, and snippets.
- Build keyword research and content-planning datasets from Yahoo results.
- Compare the same search intent across Google, Bing, Yahoo, DuckDuckGo, and Startpage.

### How to use

1. Open the Actor in Apify Console.
2. Enter one or more search queries, select a country, and choose the number of results per query.
3. Click **Start** and open the Dataset when the run finishes.

### Input

`queries` is required and accepts 1â€“10,000 search strings. Blank values and duplicates are removed, and each query can contain up to 200 characters. `country` selects the localized Yahoo market and defaults to `ES`. `resultsPerQuery` defaults to 10 and accepts 1â€“1,000 organic results; the Actor requests additional pages automatically when necessary.

This complete input produced the output example below:

```json
{
  "country": "US",
  "queries": [
    "OpenAI",
    "Python programming",
    "renewable energy"
  ],
  "resultsPerQuery": 10
}
```

### Output

Results are saved to the default Apify Dataset, with one item representing one delivered organic Yahoo result. Each item includes the query, country, page, global position, title, destination URL, Yahoo source URL, displayed URL, description, result type, and collection timestamp. The output schema also exposes a durable run summary in the default key-value store. Yahoo may return fewer unique results than requested; those rows remain valid and the summary records the shortfall.

This is the complete first Dataset item from a real successful run:

```json
{
  "query": "OpenAI",
  "country": "US",
  "page": 1,
  "position": 1,
  "title": "OpenAI | Research & Deployment",
  "url": "https://openai.com/",
  "sourceUrl": "https://r.search.yahoo.com/_ylt=A2RRfCJgXNdq.AIAhUJXNyoA;_ylu=Y29sbwN1cy1lYXN0LTEEcG9zAzEEdnRpZAMEc2VjA3Ny/RV=2/RE=1793708384/RO=10/RU=https%3a%2f%2fopenai.com%2f/RK=2/RS=9NMURC9Nx_DeotBfSFLyZM9otSc-",
  "displayUrl": null,
  "description": "We believe our research will eventually lead to artificial general intelligence, a system that can solve human-level problems.",
  "resultType": "rich",
  "capturedAt": "2026-10-20T12:19:43.367252Z"
}
```

### Pricing

The Actor uses tiered pay-per-event pricing. One `organic-result` event is charged for each organic result delivered to the Dataset. Empty values, removed duplicates, failed queries, status information, and the run summary do not create an `organic-result` charge. The actual charge is per delivered result; the 1,000-result amounts below are comparison equivalents.

| Apify plan tier | Price per organic result | Equivalent per 1,000 organic results |
|---|---:|---:|
| Free | $0.00060 | $0.60 |
| Bronze | $0.00055 | $0.55 |
| Silver | $0.00050 | $0.50 |
| Gold | $0.00045 | $0.45 |
| Platinum | $0.00045 | $0.45 |
| Diamond | $0.00045 | $0.45 |

### Related Actors

| Actor | Best for |
|---|---|
| [Bing Search Scraper – SERP Results](https://apify.com/datascraperes/bing-search-scraper) | Comparing Yahoo results with Bing search results. |
| [DuckDuckGo Search Scraper — Organic SERP API](https://apify.com/datascraperes/duckduckgo-search-results-scraper) | Comparing Yahoo results with DuckDuckGo search results. |
| [Google SERP Scraper API – Search Results Scraper](https://apify.com/datascraperes/google-serp-scraper) | Comparing Yahoo results with Google search results. |

### Limits and data quality

Yahoo rankings and snippets can change between runs. Country selection influences localization but does not guarantee that every result originates in that country. The requested result count is a maximum: Yahoo can expose fewer unique organic results, omit descriptions, end pagination early, or temporarily make a query unavailable. Successfully delivered rows are retained when another query is partial, and the run summary distinguishes completed, failed, partial, and exhausted work.

### Frequently asked questions

#### Does the Actor follow pagination automatically?

Yes. When `resultsPerQuery` is greater than the number of organic results on the first page, the Actor requests additional Yahoo result pages until it reaches the requested count or Yahoo has no more usable results.

#### Are positions global across pages?

Yes. The `position` field represents the organic ranking across the pages collected for that query, while `page` identifies the source result page.

#### Why did I receive fewer results than requested?

Yahoo may return fewer unique organic URLs, end pagination early, omit usable result cards, or make an individual query temporarily unavailable. Check the run summary for the delivered count and shortfall; already delivered Dataset items remain available.

### Responsible use

Use search-result data lawfully and responsibly. You are responsible for respecting Yahoo's applicable terms, robots and access rules, privacy and data-protection laws, copyright, and the rights of listed websites. Rankings and snippets are observations at collection time, not permanent facts.

### Support

Open an issue in the Actor's **Issues** tab with a reproducible input, run ID, affected query, country, and expected result. Never include API tokens, passwords, or other private credentials.

# Actor input Schema

## `country` (type: `string`):

Select the country where you want Yahoo Search results to be localized.

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

Add one or more search queries. Supports 1 to 10,000 unique queries. Empty lines and duplicate queries are ignored.

## `resultsPerQuery` (type: `integer`):

Number of organic Yahoo Search results to collect for each query. The Actor automatically goes through additional pages when needed. Yahoo may return fewer results for some queries.

## Actor input object example

```json
{
  "country": "ES",
  "queries": [
    "OpenAI"
  ],
  "resultsPerQuery": 10
}
```

# Actor output Schema

## `results` (type: `string`):

No description

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

No description

# 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 = {
    "country": "ES",
    "queries": [
        "OpenAI"
    ],
    "resultsPerQuery": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("datascraperes/yahoo-search-scraper").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 = {
    "country": "ES",
    "queries": ["OpenAI"],
    "resultsPerQuery": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("datascraperes/yahoo-search-scraper").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 '{
  "country": "ES",
  "queries": [
    "OpenAI"
  ],
  "resultsPerQuery": 10
}' |
apify call datascraperes/yahoo-search-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,datascraperes/yahoo-search-scraper"
        }
    }
}
```

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/IA8iDoHpCKOGvbbph/builds/soQb5DyJS3UAVVxrA/openapi.json
