Tools / Web search and scraping / API
In Python, requests.post to https://api.routergrowth.com/v1/run with a Bearer key and a body naming news.search, the query, a location such as Germany and a language. result.articles is a list of dicts with title, source, domain, snippet, url and published_at, and result.location_resolved shows how the location was read.
Ask your agent
Write a Python script that pulls offshore wind news for Germany, the UK and Denmark each morning and appends new URLs to a CSV.
Connect RouterGrowth once, then ask in plain words. New workspaces start with $1 of credit. Get a key or read the setup guide.
A real run
One call to news.search (news search), run through RouterGrowth on October 26, 2026. These are the first rows it returned; fields that name a person are masked.
| published | domain | title |
|---|---|---|
| 2026-10-26 | www.offshorewind.biz | Prysmian's New Cable-Laying Vessel Performing Sea Trials |
| 2026-10-12 | www.rwe.com | RWE completes sale of shares in Five Estuaries Offshore Wind Farm |
| www.enerdata.net | Denmark’s CIP moves forward with 1 GW offshore wind in Vietnam |
Ten English articles on offshore wind with location Germany (code 2276): a cable vessel, an RWE sale, German grid plans and Vietnam projects; one article came with no time.
Step by step
key = os.environ['ROUTERGROWTH_API_KEY'], sent as Authorization: Bearer.
requests.post(url, json={'capability': 'news.search', 'input': {'query': 'offshore wind', 'location': 'Germany', 'language': 'en'}}, headers=headers, timeout=60).
pandas.DataFrame(r.json()['result']['articles']) gives one row per article.
pandas.to_datetime on published_at; empty strings become NaT, so filter or fill them.
Price
List prices on this call, read from the catalog when this page was built. The exact figure is quoted before every run, and a monthly plan lowers it.
In practice
You describe the job; the agent picks the calls, shows the price and runs them.
Write a Python script that pulls offshore wind news for Germany, the UK and Denmark each morning and appends new URLs to a CSV.
In Python, fetch news on our category, then scrape the top three articles and save them as markdown files.
Connect
One MCP server for Claude, ChatGPT, Claude Code, Codex and Cursor, or the same call over the CLI and REST with the input above.
claude mcp add --transport http routergrowth https://api.routergrowth.com/mcp
npm install -g routergrowth && routergrowth setup
routergrowth run -c news.search -i '{"query": "offshore wind", "location": "Germany", "language": "en", "limit": 8}'curl -X POST https://api.routergrowth.com/v1/run \
-H "Authorization: Bearer $ROUTERGROWTH_API_KEY" \
-d '{"capability": "news.search", "input": {"query": "offshore wind", "location": "Germany", "language": "en", "limit": 8}}'Worth knowing
It shows the location code and name the query used. matched false means the location was not recognized.
An article can come back with an empty published_at. Keep it, but sort it last.
Articles are fetched in tens, so a limit of 8 can return 10. Slice the list in code.
FAQ
None is needed. requests or httpx and your key are enough.
A string such as 2026-10-26 06:59:39 +00:00, which pandas.to_datetime reads.
Yes. Send them concurrently; each query is its own run.
The response says why and nothing is charged. Retry once or skip that query.
More on Web search and scraping
Reading this as an agent? This page as markdown: /tools/web-scraping/news-api-python.md
Connect your agent once. The first calls run on the $1 that comes with signup.