Keyword Research Scraper: 8 search boxes, a-z, questions, CSV avatar

Keyword Research Scraper: 8 search boxes, a-z, questions, CSV

Pricing

from $3.00 / 1,000 result rows

Go to Apify Store
Keyword Research Scraper: 8 search boxes, a-z, questions, CSV

Keyword Research Scraper: 8 search boxes, a-z, questions, CSV

One seed list, suggestions from every search box you select, one flat CSV or JSON dataset. Google, YouTube, Amazon, Bing, DuckDuckGo, TikTok, Pinterest, App Store and Play. Each row has the suggestion, rank, expansion and engine.

Pricing

from $3.00 / 1,000 result rows

Rating

0.0

(0)

Developer

Tallyrake Data

Tallyrake Data

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

Search-box suggestions from up to eight engines, one seed list, one flat dataset. Give it keywords. It asks Google, YouTube, Amazon, Bing, DuckDuckGo, TikTok, Pinterest, and the App Store plus Google Play (whichever you select) for the seed, the seed plus a to z, question words, and prepositions. Comparisons and numbers are off unless you turn those expansions on. One row per suggestion per seed per engine, with a stable id and an engine field so you can pivot the CSV.

Engines run one after another, each with its own pacing. If one engine fails or blocks the run's IP, the run writes { "type": "engine_error", "engine": "...", "reason": "..." } and continues with the rest. The run status message and the SUMMARY key-value record both say how many rows each engine produced.

This is the same suggestion client as the single-engine actors, called in one run. It is not search volume, not a results page, and not a place to download products, videos, pins, or app listings.

Same box, one engine at a time: Google, YouTube, Amazon, Bing, DuckDuckGo, TikTok, Pinterest, App Store and Play.

What you get

FieldExample
enginegoogle, youtube, amazon, bing, duckduckgo, tiktok, pinterest, appstore
keywordcoffee grinder (your seed)
querycoffee grinder b (the exact string sent)
suggestionburr coffee grinder
rank1 (position in that engine's list for that query)
expansiondirect, alphabet, question, preposition, comparison, number, depth
modifierb, how, for, vs
depth1 or 2
countryus (the country you set, on every row)
languageen (the language you set, on every row)
fetchedAtISO timestamp
idfirst 16 hex chars of sha1 of engine, keyword, and suggestion, joined with a vertical bar

Rows are deduplicated per seed per engine (case-insensitive), so a suggestion that appears under several modifiers is kept once, under the first query that produced it. The same text from two engines is two rows. App Store and Play dedupes per store, so Apple and Play can both keep "photo editor". Those two rows share an id, because the id does not include the store. Filter on store before you unique the id column.

Engine-specific fields from the single-engine actors are still on the row when that engine produced them:

EngineExtra fields
Google, YouTube, Bing, DuckDuckGorelevance, suggestType, subtypes. This actor uses Google's firefox client, so relevance is null. subtypes is still set when Google sends it
Amazonthose, plus marketplace (US, UK, ...)
Bingmarket (en-US)
DuckDuckGoregion (the kl code, us-en)
TikTokhotLevel, ecomIntent, region
PinterestsuggestionType, suggestionId, url, pinCount, boardCount, trending, verified, subLabel, region
App Store and Playstore (apple or google-play)

An engine that fails or gets blocked adds one dataset row and no suggestion fields: type = engine_error, engine, reason.

Engines

InputSearch boxRequests per queryHow country and language are applied
googleGoogle Autocomplete1hl = language, gl = country, firefox client (up to 10 suggestions)
youtubeYouTube1same suggestion host as Google, with ds=yt
amazonAmazon1marketplace from country: US, UK, DE, FR, ES, IT, CA, JP, IN, MX, BR, AU. gb is UK. Any other country uses the US site
bingBing1market language-COUNTRY, e.g. en-US. uk and gb are sent as GB. A language that already looks like en-GB is sent as-is
duckduckgoDuckDuckGo1kl country-language, e.g. us-en. gb is sent as uk-en
tiktokTikTok1web search params (aid=1988, region from country)
pinterestPinterest1host from country (us is www, gb and uk are uk.pinterest.com)
appstoreApple App Store, then Google Play2both stores, same country and language. Apple's storefront header and Play's batchexecute call are unchanged

Example input

{
"keywords": ["coffee grinder"],
"engines": ["google", "youtube", "amazon"],
"expansions": ["alphabet", "questions", "prepositions"],
"depth": 1,
"country": "us",
"language": "en",
"dedupe": true,
"proxyConfiguration": { "useApifyProxy": true },
"maxConcurrency": 3,
"pacingMs": 200
}

Paste seeds one per line. The default engines are Google, YouTube, and Amazon. The default expansions send 52 queries per seed per engine (1 seed + 26 letters + 14 question words + 11 prepositions). Comparisons and numbers are not in that 52. One seed sends many queries; the output is dataset rows, not queries. An engine_error row is a dataset row.

Proxy defaults to Apify Proxy with no proxy group (datacenter). Leave the groups empty. Turn proxy off only for a small direct run.

country is also read from region when country is omitted. country wins when both are set.

Recipes

Three boxes, one sheet. Seeds: your head terms. Engines: the default three. Expansions: alphabet. Depth 1. Pivot the CSV on engine.

Questions people type. Engines: google and youtube. Expansions: questions. Depth 1. The modifier column is the question word.

App names. Engines: appstore only. That is Apple and Google Play. Read store before you dedupe on id.

Reliability and cost

Billing terms are on the Pricing tab of the listing. Apify platform usage is a separate charge and is not the listing price. Empty queries produce no suggestion rows. Every request is paced with a jittered delay (pacingMs, default 200 ms). On HTTP 429, 403, or 503 the engine rotates its session and backs off. After repeated blocks that engine stops, an engine_error row is written, and the next engine starts.

No soaked run of this actor has been measured on Apify yet, so this README does not state a success rate or a platform-usage cost. The single-engine READMEs have their own measured yields. Do not add those up and treat the sum as a promise for this actor.

Cost limit

If a run reaches the "Maximum total charge per run" you set, it stops in process rather than being aborted by the platform: the run ends with status SUCCEEDED, and the run status message says how many rows were written and how many were found but not written. Engines that had not started are marked not run in SUMMARY. Re-running the same input writes the same prefix again, so raise the cap before re-running if you want the rest.

Bigger jobs

Need this as a one-off file instead of a run? Ask for a quote at https://tallyrake.com/datasets/. We may decline. A quote binds nothing, and a job exists only when we confirm it in writing, before any payment.

Limits

Default run, one seed, three engines, depth 1: 156 suggestion requests (52 per engine). All eight engines at the default expansions, depth 1: 468 requests per seed (seven engines at 52, App Store and Play at 52 per store). Depth 2 sends first-level suggestions back, up to maxQueriesPerKeyword further requests per seed per engine (per store for App Store and Play). The cap applies to each depth's plan, the same way it does on the single-engine actors, not as one combined total across engines.

maxConcurrency (1 to 10) is inside one engine. Engines are not queried at the same time.

Suggestions are the list that box returned at the time of the run. They carry no search volume, no CPC, and no difficulty. The id here is not the id the single-engine actors write (those hash more fields). Join on engine + keyword + suggestion, not on id, if you mix the two.

Export CSV for Excel and Google Sheets. Export JSON for pipelines. SUMMARY in the key-value store has per-engine query counts, row counts, block flags, and error strings.

What it is NOT

This is not eight separate runs you merge by hand, and it is not a scraper of search result pages. It does not return products, prices, reviews, videos, pins, boards, shops, or app listings. It does not log in. It does not return Google Trends, search volume, or keyword difficulty. A blocked engine does not cancel the others, and a successful engine does not fill in rows for an engine that returned nothing.