Open-Source Cold Email & Warmup Platform
Warmbly 是开源的冷邮件平台:温暖您的邮箱、发送活动、并对每条回复进行分流。可在我们的云端运行,也可自行托管整套系统。
AI 翻译
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证Pull every Google Autocomplete suggestion for your seed keywords: A-Z, question and preposition expansions in any country and language. Keyword research without the guesswork: pay per seed keyword, and failures are free. Runs on Apify Store: https://apify.com/josh99smith/google-autocomplete-scraper
翻译准备中
取自仓库 README
正在加载完整 README。 以下为已保存的摘录。
This Google Autocomplete scraper collects Google keyword suggestions for any list of seed keywords, in any country and language. Type best crm for into Google and you see ten to fifteen phrases that real people search for; this Actor fetches those phrases for hundreds of seeds at once, expands them with a-z, question, preposition and number modifiers, and hands you a clean, deduplicated keyword list as JSON, CSV or Excel.查看完整 README ↗This Google Autocomplete scraper collects Google keyword suggestions for any list of seed keywords, in any country and language. Type best crm for into Google and you see ten to fifteen phrases that real people search for; this Actor fetches those phrases for hundreds of seeds at once, expands them with a-z, question, preposition and number modifiers, and hands you a clean, deduplicated keyword list as JSON, CSV or Excel.
It is built for SEO specialists, content marketers and product researchers who need long-tail keyword ideas and question-style queries without paying for a keyword-tool subscription. You pay a flat price per seed keyword, and keywords that could not be queried are reported free of charge.
best crm for real estate agents, best crm for nonprofits, ...).gl=de, gl=in, gl=br and the matching language to see how demand differs by market.For every seed keyword the Actor calls Google's public autocomplete endpoint (the same one the search box uses), parses the JSON reply and stores each suggestion together with its position and Google's relevance score. Enabled expansions send additional queries (<keyword> a ... <keyword> z, how <keyword>, <keyword> vs, <keyword> 2, ...), and depth 2 re-queries every suggestion found at depth 1 once. Results are deduplicated per seed keyword.
Requests are sent with low concurrency and small random delays to stay polite. Suggestions change by country, language and time, so two runs are not guaranteed to be identical; rare phrases may return few or no suggestions. No search result pages are scraped and no personal data is collected.
best crm for, how to start a podcast) work best.us / en).2 for a deeper crawl.{
"keywords": ["best crm for", "how to start a podcast"],
"country": "us",
"language": "en",
"expandQuestions": true,
"maxSuggestionsPerKeyword": 50,
"depth": 1
}
One record per unique suggestion:
{
"success": true,
"seedKeyword": "best crm for",
"query": "what best crm for",
"suggestion": "what's the best crm for small business",
"position": 1,
"relevance": 601,
"suggestType": "QUERY",
"modifierType": "question",
"modifier": "what",
"country": "us",
"language": "en",
"fetchedAt": "2026-09-18T19:45:58.767Z"
}
Requests that fail are recorded too, so nothing silently disappears:
{
"success": false,
"seedKeyword": "best crm for",
"query": "best crm for k",
"errorType": "rate-limited",
"error": "HTTP 429 from suggest endpoint",
"statusCode": 429,
"fetchedAt": "..."
}
The run also stores a SUMMARY record in the key-value store with keywordsRequested, keywordsCharged, suggestionsFound, failures and requestsMade.
| Field | Description |
|---|---|
seedKeyword | The keyword from your input that this suggestion belongs to. |
query | The exact query sent to Google (seed plus modifier, or a depth-1 suggestion when modifierType is depth2). |
suggestion | The autocomplete suggestion text. |
position | 1-based position of the suggestion in Google's reply for that query. |
relevance | Google's relevance score for the suggestion (higher is more popular); may be null. |
suggestType | Google's suggestion type, usually QUERY. |
modifierType | none, alphabet, question, preposition, number or depth2. |
modifier | The letter, word or digit that was added, or the re-queried suggestion for depth2. |
country, language | The gl and hl values used. |
errorType | For failures: rate-limited, blocked, timeout, network, http-error or other. |
Run the Actor and get every suggestion back in one HTTP call:
curl -X POST "https://api.apify.com/v2/acts/josh99smith~google-autocomplete-scraper/run-sync-get-dataset-items?token=<YOUR_API_TOKEN>" \
-H "Content-Type: application/json" \
-d '{ "keywords": ["best crm for"], "country": "us", "language": "en" }'
Python, with the apify-client package:
from apify_client import ApifyClient
client = ApifyClient("<YOUR_API_TOKEN>")
run = client.actor("josh99smith/google-autocomplete-scraper").call(
run_input={"keywords": ["best crm for"], "country": "us", "language": "en", "expandQuestions": True}
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["seedKeyword"], "->", item.get("suggestion"))
JavaScript, with the apify-client package:
import { ApifyClient } from "apify-client";
const client = new ApifyClient({ token: "<YOUR_API_TOKEN>" });
const run = await client.actor("josh99smith/google-autocomplete-scraper").call({
keywords: ["best crm for"],
country: "us",
language: "en",
expandAlphabet: true,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.map((item) => item.suggestion));
The Actor is exposed as a tool by the Apify MCP server, so an AI agent can call it by name. Add this to your MCP client configuration (Claude Desktop, Claude Code, Cursor, VS Code, Windsurf and others):
{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com?tools=josh99smith/google-autocomplete-scraper",
"headers": { "Authorization": "Bearer <YOUR_API_TOKEN>" }
}
}
}
Then ask, for example: "Get Google autocomplete suggestions for "best crm for" in the US with josh99smith/google-autocomplete-scraper." The agent fills in the input, runs the Actor and reads the dataset back; you pay the same per-result price as in the Console.
The Actor can also be scheduled, or connected to Zapier, Make, n8n and Google Sheets in the Integrations tab.
You pay a flat price per seed keyword (shown next to the Start button). The price covers every expansion and depth-2 request for that keyword, however many suggestions it produces; 15 suggestions or 1,000 cost the same. A keyword whose requests fail because of rate limiting or a network error is not charged and is reported with an errorType instead. Keywords that legitimately return zero suggestions are charged, because the queries did run.
There is no charge for Actor start-up, and the Actor stops automatically when it reaches the maximum cost you set for a run, so a large keyword list never produces a surprise bill.
How it compares (September 2026). Other autocomplete Actors bill per suggestion ($0.0005 to $0.001 each) or per expansion query plus a $0.005 start fee. This Actor bills a flat $0.003 per seed keyword no matter how many expansions or suggestions it produces. A seed keyword with alphabet, question and preposition expansions at depth 2 returned 1,000 unique suggestions from 188 requests in our test: $0.003 here, $0.50 to $1.00 on a per-suggestion price.
maxSuggestionsPerKeyword stops sending requests for a keyword as soon as the limit is hit, which keeps depth-2 runs fast. In testing, best crm for with a-z + prepositions + depth 2 produced 1,000 unique suggestions from 188 requests in about 35 seconds.start a podcast rather than how to start a podcast.Yes, they come from the same public autocomplete endpoint, using the client=chrome mode, which returns up to 15 suggestions plus relevance scores. Suggestions are personalised in a signed-in browser, so what you see may differ slightly from the unpersonalised results the Actor collects.
No. Google Autocomplete does not expose volumes. The relevance score is Google's own ranking signal for the suggestion list and is useful for ordering, not for estimating traffic.
There is no fixed cap on the keyword list; the run stops cleanly when it reaches the maximum cost you set. Google tolerates a few requests per second from one IP, so keep Max concurrency at the default (3) and enable Apify Proxy in the Advanced section if you see rate-limited failures on big runs (proxy traffic is billed separately by Apify). Seed keywords are processed one after another, and the run pauses for 10 seconds when Google throttles it and stops after 3 consecutive keywords fail completely.
The Actor reads a public, unauthenticated endpoint at a low request rate, stores only the suggestion text Google publishes, and collects no personal data. You are responsible for using the results in compliance with the laws and terms that apply to you.
No. Output fields are stable: existing fields are never renamed or removed without a major version bump announced in the changelog, and new fields are only ever added. You can build integrations on the schema without checking it after every run.
Best Damn Google Autocomplete Scraper plugs into the tools you already use through Apify integrations, so results can flow on without anyone downloading a file. Ready-made connectors include:
You can also attach webhooks to trigger your own endpoint whenever a run succeeds, fails or times out. For example, append fresh keyword ideas to a Google Sheet, or send a Slack digest when a research run finishes.
Found a problem or need another modifier set (for example comparison words in your language)? Open a ticket in the Issues tab of this Actor. The source code is available under the MIT licence. If this Actor saved you time, a review on its Store page helps other people find it.
The full source code is on GitHub: josh99smith/google-autocomplete-scraper. Stars and pull requests are welcome.