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.