Skip to content
CrawlerData
Menu
Guides

Local news from Google News: put the city in the query, not the location

We tested Google News by city two ways. The location parameter changed 1 result in 13; the city in the query text gave local outlets and no shared links.

CrawlerData teamPublished 6 min read

Contents

If you want to know what a city is reading, say for PR, a local business or a regional publisher, the obvious move is to ask for a city. Several Google endpoints accept a location parameter for that, so we tried it on Google News. It barely did anything. Putting the city in the search text did exactly what we wanted.

This guide has the measurements for both approaches, the Python to run either, and a note on where location does work. Everything comes from requests we ran in October 2026 with the Google News API. News changes by the minute, so your results will differ.

How we ran it

We used 10 topics with local interest: city council, weather, traffic, restaurant opening, high school football, real estate, crime, school board, things to do this weekend and jobs. We ran them for four cities, Austin, Brooklyn, Denver and Miami, with country set to us, in two ways:

  • The location parameter, for example Austin,Texas,United States, with the plain topic as the query. We also ran each topic with no location as a baseline. That is 50 requests.
  • The city in the query text, for example austin city council. That is 40 requests.

It is a small set we picked, checked once. It shows how each approach behaves, not how Google News works in general.

The location parameter barely changes the news

Google accepted location without complaint, and the results hardly moved:

  • A request returned a median of 13 results, from 10 to 22.
  • Two different cities shared 11.9 links on average for the same topic. That is about nine in ten.
  • A city compared with no location at all shared 11.9 links too, so setting a location was no more different than not setting one.
  • Across the four cities, only 6 of 553 titles, 1%, named the city.

The sources told the same story. For city council, the first five outlets were almost identical for all five runs: KUT, Inquirer.com, Mother Jones, Axios and one or two others. A few results did shift. A Dallas TV station, WFAA, appeared fourth for high school football in Austin and in the baseline, but not elsewhere. FOX 5 New York appeared fifth for weather in Brooklyn only. That is about one result in 13.

The city in the query is local

Putting the city in the search text changed everything. We ran the same 10 topics with queries such as austin city council:

Measure Result
Results per search 10 for every search
Links shared between any two cities 0
Titles that named the city 285 of 400 (71%)
Distinct sources across the four cities 178
Sources that appeared for only one city 157

And the outlets were local:

City Titles naming the city Leading sources
Austin 79% Austin American-Statesman (17), KXAN Austin (10), KVUE (7), FOX 7 Austin (6)
Denver 66% The Denver Post (14), Denver Gazette (11), 9News (9), Denverite (5)
Miami 78% Miami Herald (10), CBS News (8), NBC 6 South Florida (6)
Brooklyn 62% News12 | Brooklyn (8), Brooklyn Eagle (5), MaxPreps (5), ABC7 New York (4)

For city council, the first results by city were:

austin    KUT, KXAN Austin, Austin American-Statesman, The Austin Bulldog
denver    Axios, Denverite, The Denver Post, Denver Gazette, City and County of Denver
miami     Miami Herald, The Miami Student, WPLG Local 10, CBS News
brooklyn  hometownsource.com, Brooklyn Eagle, MinneapoliMedia, Brooklyn Eagle

City names are ambiguous

The last line shows the catch. brooklyn city council returned hometownsource.com and MinneapoliMedia, outlets that appear to be in Minnesota, next to the Brooklyn Eagle in New York. miami city council included The Miami Student, a university paper. Brooklyn scored 62% on city names in titles, the lowest of the four, and the ambiguity is a likely reason, though we did not test it.

The fix is the one a person would use: add the state. austin tx city council is a clearer request than austin city council. In a quick test with the state added, 8 of 10 titles named Austin.

Where location does work

We did not want to leave the impression that location is useless, so we checked the other endpoints:

  • google-search: yes, strongly. For plumber, Austin and Brooklyn shared 1 of 8 or 9 organic results, and the local packs listed businesses in each city. For best pizza and coffee shop they shared 3 of 9. Details are in Google results by country.
  • google-local: yes. See local rank tracking.
  • google-images: no. For coffee shop and restaurant interior, Austin and Brooklyn shared 94 and 100 of 100 images.
  • google-news: barely, as above.

So use location for search and local results, and the city name in the query for news.

The code

Put your key in an environment variable:

export CRAWLERDATA_API_KEY="YOUR_API_KEY"
import os
import time
from collections import Counter

import requests

API_URL = "https://api.crawlerdata.com/v1/jobs"
HEADERS = {"Authorization": f"Bearer {os.environ['CRAWLERDATA_API_KEY']}"}


def google_news(query, country="us", location=None, retries=4):
    params = {"query": query, "country": country}
    if location:
        params["location"] = location
    body = {"endpoint": "google-news", "params": params, "queue": "live"}
    for attempt in range(retries):
        resp = requests.post(API_URL, json=body, headers=HEADERS, timeout=180)
        if resp.status_code == 429:
            time.sleep(int(resp.headers.get("retry-after", 10)))
            continue
        resp.raise_for_status()
        job = resp.json()["job"]
        if job["status"] == "completed":
            return resp.json()["result"]["news_results"]
        if "retry" in (job["error"] or "").lower():  # "service is busy" and "temporarily blocked" both say retry
            time.sleep(5 * (attempt + 1))
            continue
        raise RuntimeError(job["error"])
    raise RuntimeError("News search failed after retries")


def local_news(topic, city, state):
    """City in the query text. 'Austin' is not unique, so add the state: 'austin tx city council'."""
    return google_news(f"{city} {state} {topic}")


def city_share(results, city):
    """Share of results whose title names the city."""
    hits = sum(1 for r in results if city.lower() in r["title"].lower())
    return hits, len(results)


def top_sources(results, n=5):
    return Counter(r["source"] for r in results).most_common(n)

On city council for Austin, both ways side by side:

by_text = local_news("city council", "austin", "tx")
by_param = google_news("city council", location="Austin,Texas,United States")
query text : (8, 10) [('KUT', 2), ('City of Austin, Texas (.gov)', 1), ('KXAN Austin', 1), ('Austin Current', 1)]
location   : (1, 10) [('KUT', 1), ('Inquirer.com', 1), ('KBTX News 3', 1), ('KSL News', 1)]
links shared: 1

Eight of ten titles named Austin with the city in the query text, and one of ten with location. The two result lists shared one link.

A local news monitor

For a local business or a publisher, the useful version is a daily list for each city and topic, with new links flagged. The monitor from our Google News guide works unchanged: call local_news() instead of google_news(), keep the links you have seen and treat the rest as new. To see which outlets cover your city most, count the sources, as in which publishers dominate Google News.

What it costs

Every request is 1 credit, on every queue. Starter is $1.00 per 1,000 requests and the largest pack is $0.30 per 1,000, see pricing.

What you run Requests At $1.00 per 1,000 At $0.30 per 1,000
This study, query-text part 40 $0.04 $0.012
5 topics in 20 cities, daily for a month 3,000 $3.00 $0.90
5 topics in 50 cities, hourly for a month 180,000 $180.00 $54.00

Failed requests are not charged. The tests behind this guide, including the location comparisons on the other endpoints, used about 115 credits.

Next steps

You now know how location behaves on four endpoints, that the city belongs in the query for news, and you have code that fetches local news by city. The Google News API page lists every parameter with a full example response, and the news and brand monitoring page shows how teams use it.

Frequently asked questions

How do I get local news for a city from Google News?
Put the city in the query text, for example austin tx city council. In our October 2026 test of 10 topics in 4 cities, that gave 10 results per search, 71% of the titles named the city, and the four cities shared no links at all. Add the state, because several city names are not unique.
Does the location parameter work on Google News?
The google-news endpoint accepts it, but it barely changed the results. Two cities shared 11.9 links on average for the same topic, against 11.9 between a city and no location at all, and only 1% of titles named the city. Use the query text instead.
Where does the location parameter work?
On google-search and google-local it changed the results a lot. For plumber, Austin and Brooklyn shared 1 of 8 organic results, and the local packs listed businesses in each city. On google-images, Austin and Brooklyn shared 94 and 100 of 100 images for two searches.
Which outlets show up for a city?
With the city in the query, the leaders were local: Austin American-Statesman, KXAN and KVUE for Austin, The Denver Post and Denver Gazette for Denver, and the Miami Herald for Miami. Of 178 sources, 157 appeared for only one city.
What goes wrong with city names?
They can mean several places. Brooklyn city council returned outlets that appear to be in Minnesota, and miami city council included a university paper. Add the state, such as brooklyn ny.
How much does a city-by-city news check cost?
1 credit per search. Our 40 searches for 10 topics in 4 cities cost 40 credits, $0.04 at the Starter rate of $1.00 per 1,000 requests. Watching 5 topics in 20 cities every day is 3,000 credits a month, or $3.00.
  • Google News
  • Local news
  • Google News API
  • Geo-targeting
  • Python
  • Data