Google Search Scraper — Bing, Brave & DuckDuckGo
Pricing
from $0.75 / 1,000 search results
Google Search Scraper — Bing, Brave & DuckDuckGo
Scrape Google, Bing, Brave, and DuckDuckGo search results. Export each engine result with its exact query, rank, URL, title, and snippet.
Pricing
from $0.75 / 1,000 search results
Rating
0.0
(0)
Developer
Chronometrica
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
2
Monthly active users
5 days ago
Last modified
Share
🏠 What does Google Search Scraper do?
Google Search Scraper collects public results from Google, Bing, Brave, and DuckDuckGo. Google works on its own. You can add other engines when you want more coverage or want to compare ranks.
The main output is a search result observation. Each row tells you:
- ⚙️ which exact query the Actor ran;
- 🧭 which search engine returned the result;
- 🏅 where the supported result block appeared;
- 🔗 which public URL was found;
- 📝 its title and any snippet the engine showed.
One engine result is one row. Results are not merged across engines. If Google returns 10 results and DuckDuckGo returns 10 results, the dataset can contain 20 rows. If both engines find the same URL, both rows stay in the dataset.
Use the Actor for SEO checks, brand tracking, competitor research, site search, public mention discovery, lead research, scheduled alerts, AI tools, and RAG.
🔎 What can it search?
Each query runs exactly as entered. You can use normal text, quoted phrases,
site:, intitle:, filetype:, exclusions, and other operators supported by
the selected search engine.
🧭 Supported search engines
| Engine | Web search |
|---|---|
| Yes | |
| 🟦 Bing | Yes |
| 🦁 Brave | Yes |
| 🦆 DuckDuckGo | Yes |
Each engine runs as its own search. If one engine fails, useful rows from other engines can still be saved. The run summary shows what happened.
📦 What data can I extract?
The dataset grain is:
one run + one engine + one executed query + one page + one result position
| Data group | Fields |
|---|---|
| 🏠 Run | runId |
| 🔎 Search request | country, language, safeSearch |
| ⚙️ Search execution | engine, executedQuery |
| 🏅 Position | page, rankOnPage, rank |
| 🔗 Result | title, canonicalUrl, resultDomain, snippet |
| 📣 Sponsored result | isSponsored, advertiserDomain |
| 🕐 Observation | observedAt, schemaVersion |
Missing public values stay null. They are not guessed.
What does executedQuery mean?
executedQuery is the exact query one engine received. Search operators remain
part of this value, so every row keeps its own query and engine origin.
🚀 Quick start
- Open the Actor in Apify Console.
- Enter one or more queries.
- Pick Google or add more engines.
- Start with 10 results.
- Click Start.
- Open Output to view or export the rows.
🌐 Small Google search
{"queries": ["machine learning tutorials"],"engines": ["google"],"maxResultsPerExecutedQuery": 10,"country": "US","language": "en","safeSearch": true,"includeSponsoredResults": false}
🧭 Compare Google and DuckDuckGo
{"queries": ["best web scraping tools"],"engines": ["google", "duckduckgo"],"maxResultsPerExecutedQuery": 10}
This input can save up to 20 rows: 10 from Google and 10 from DuckDuckGo.
🎯 Search selected sites with site:
{"queries": ["site:apify.com web scraping", "site:github.com web scraping"],"engines": ["google", "duckduckgo"],"maxResultsPerExecutedQuery": 25}
Each operator query runs separately. Search engines decide which results match their supported operators.
⚙️ Input settings
| Setting | What it controls |
|---|---|
queries | 1 to 100 original queries. |
engines | Search engines to run. Google is selected by default. |
maxResultsPerExecutedQuery | 1 to 100 saved rows for each engine and exact executed query. Default: 10. |
country | Localizes results. Choose one of 249 ISO countries and territories. Default: United States. |
language | Search language such as en, fr, de, or ja. Default: en. |
safeSearch | Asks supported engines to filter explicit results. Default: true. |
includeSponsoredResults | Keeps detected paid results when on. Default: false. |
How many rows can a run save?
The cap applies to every executed query on every engine.
For one web query, two engines, and a cap of 10:
1 query × 2 engines × 10 results = up to 20 rows
The run summary shows searchesCompiled, executionsPlanned, and saved row
counts by query and engine.
How does country change the results?
Country can change ranks, local sites, ads, and which results appear. The same chosen country is requested from every engine and saved in every row. Country targeting is a preference, not a promise; source availability can vary.
📣 Sponsored results
Sponsored results are removed by default. Turn on
includeSponsoredResults only when ads are useful to your research.
Each kept paid result has:
isSponsored: trueadvertiserDomain: the detected advertiser domain, when shown
Because rows are not merged, an organic Google result and a paid DuckDuckGo result remain two clear observations.
⬆️ Output example
{"runId": "abc123","country": "US","language": "en","safeSearch": true,"engine": "google","executedQuery": "best web scraping tools","page": 1,"rankOnPage": 3,"rank": 3,"title": "A guide to web scraping tools","canonicalUrl": "https://example.com/web-scraping-tools","resultDomain": "example.com","snippet": "Search-engine snippet","isSponsored": false,"advertiserDomain": null,"observedAt": "2026-07-17T12:00:00.000Z","schemaVersion": "7.0"}
You can export the dataset as JSON, JSONL, CSV, Excel, XML, RSS, or HTML. You can also use the Apify API, SDKs, webhooks, schedules, Make, Zapier, or n8n.
🔁 Repeated runs and schedules
Each Actor run receives its own dataset. Running the same query again creates
new observations with a new runId and observedAt. Rows are not silently
updated across runs. Use engine, executedQuery, canonicalUrl, and
observedAt when comparing rank observations over time.
📌 Run summary
OUTPUT and RUN_SUMMARY report:
- 🔎 queries, compiled searches, and planned engine executions;
- 📄 pages attempted and parsed;
- 📦 rows saved by original query and by engine;
- 🚫 invalid URLs removed;
- 📣 sponsored candidates seen, removed, and saved;
- 🧭 status counts for every engine;
- 🏁 the final stop reason.
💵 Pricing event and cost controls
The Actor uses pay-per-result pricing. One search-result event means one row
saved for one engine and one executed query. The current price is shown in
Apify Console before a run.
Use maxResultsPerExecutedQuery, the number of queries, and the number of
selected engines to control the maximum row count. Start with one engine and
10 results. Add more only when the small run proves useful.
🧪 Test evidence
Version 1.0 focuses on simple web queries through Google, Bing, Brave, and DuckDuckGo. Release checks cover input rules, row grain, URL safety, sponsored-result filtering, pagination, countries, engine failures, billing, and the public output contract.
Search results, blocks, runtime, and cost change by query, country, language, engine state, and Apify rates. Test records are evidence, not promises.
🔒 Public-data boundary
The Actor reads public, logged-out search results.
It does not:
- 🔐 log in to search accounts;
- 🍪 use customer cookies or copied sessions;
- 🧩 solve CAPTCHAs or other access challenges;
- ✅ promise complete coverage of the web.
⚠️ Limits
- Search indexes change often.
- Results and ranks vary by engine, time, place, and language.
- An engine can block, rate-limit, repeat, or stop on deeper pages.
- The Actor can return fewer rows than the cap after checks and filtering.
- A URL can appear more than once by design when engines or executed queries differ.
- Snippets can be missing or stale.
Use runId, engine, executedQuery, page, and rankOnPage to identify and
audit each row.
❓ FAQ
Why does the same URL appear more than once?
This is expected. Each row is one engine result. The same URL from Google and DuckDuckGo gives you two rank observations. No cross-engine result is hidden.
Why did I get fewer rows than the cap?
The cap is a maximum, not a promise. A source may have fewer results, block a request, or return rows removed by URL or sponsored-result checks. Read the run summary for exact counts.
Does it need a search-engine API key?
No. It reads public, logged-out search results.
🏠 Related Actors
| Actor | Use it for |
|---|---|
| X Search & Discovery Scraper | Find public X posts with keywords, filters, and date ranges. |
| YouTube Search Scraper | Find public YouTube videos and channels. |
| TikTok Search Scraper | Find public TikTok posts and profiles. |
🛟 Support
For help, send the run ID, input, expected result, observed row or missing URL, and the engine that had the problem.
Use public data in line with the law, search-engine rules, and Apify rules. Do not use it to harass people or build sensitive personal profiles.