Tutorial

How to Extract Google Reviews at Scale for Journalism

Pull thousands of Google Reviews for investigative journalism using Scavio Maps search. No official API caps.

Investigative journalists need bulk Google Reviews to surface patterns (fake reviews, review bombing, wage theft complaints). Google's official API caps at 5 reviews per place. This tutorial uses Scavio's Maps/Places search to pull thousands of reviews per business at journalism scale.

Prerequisites

  • Python 3.10+
  • A Scavio API key
  • A list of target business names or place IDs
  • pandas for analysis

Walkthrough

Step 1: Find the place ID

Scavio Maps search returns place_id for each business.

Python
import requests, os
API_KEY = os.environ['SCAVIO_API_KEY']

def find_place(name):
    r = requests.post('https://api.scavio.dev/api/v1/search',
        headers={'x-api-key': API_KEY},
        json={'platform': 'google_maps', 'query': name})
    return r.json().get('local_results', [{}])[0].get('place_id')

Step 2: Pull reviews by place_id

Paginate through all reviews.

Python
def reviews(place_id, max_pages=10):
    all_reviews, token = [], None
    for _ in range(max_pages):
        body = {'platform': 'google_reviews', 'query': place_id}
        if token: body['next_token'] = token
        r = requests.post('https://api.scavio.dev/api/v1/search',
            headers={'x-api-key': API_KEY}, json=body).json()
        all_reviews += r.get('reviews', [])
        token = r.get('next_token')
        if not token: break
    return all_reviews

Step 3: Store in pandas

One row per review for analysis.

Python
import pandas as pd
def to_df(reviews):
    return pd.DataFrame(reviews)[['author', 'rating', 'date', 'text']]

Step 4: Run pattern analysis

Frequent keywords, rating distributions, velocity bursts.

Python
def burst_days(df):
    return df.groupby('date').size().sort_values(ascending=False).head(10)

Step 5: Export for the newsroom

CSV for editors, markdown excerpts for quotes.

Python
def export(df, business):
    df.to_csv(f'reviews_{business}.csv', index=False)

Python Example

Python
import os, requests, pandas as pd

API_KEY = os.environ['SCAVIO_API_KEY']

def pull(business):
    pid = requests.post('https://api.scavio.dev/api/v1/search',
        headers={'x-api-key': API_KEY},
        json={'platform': 'google_maps', 'query': business}).json()['local_results'][0]['place_id']
    revs = requests.post('https://api.scavio.dev/api/v1/search',
        headers={'x-api-key': API_KEY},
        json={'platform': 'google_reviews', 'query': pid}).json().get('reviews', [])
    return pd.DataFrame(revs)

print(pull('Joe Coffee Brooklyn').head())

JavaScript Example

JavaScript
const API_KEY = process.env.SCAVIO_API_KEY;
async function pull(business) {
  const mapR = await fetch('https://api.scavio.dev/api/v1/search', {
    method: 'POST',
    headers: { 'x-api-key': API_KEY, 'Content-Type': 'application/json' },
    body: JSON.stringify({ platform: 'google_maps', query: business })
  });
  const pid = (await mapR.json()).local_results[0].place_id;
  const revR = await fetch('https://api.scavio.dev/api/v1/search', {
    method: 'POST',
    headers: { 'x-api-key': API_KEY, 'Content-Type': 'application/json' },
    body: JSON.stringify({ platform: 'google_reviews', query: pid })
  });
  return (await revR.json()).reviews;
}

Expected Output

JSON
Thousands of reviews per business in minutes. Pandas dataframe with date, rating, author, text. Ready for burst-day detection and keyword analysis.

Related Tutorials

Frequently Asked Questions

Most developers complete this tutorial in 15 to 30 minutes. You will need a Scavio API key (free tier works) and a working Python or JavaScript environment.

Python 3.10+. A Scavio API key. A list of target business names or place IDs. pandas for analysis. A Scavio API key gives you 500 free credits per month.

Yes. The free tier includes 500 credits per month, which is more than enough to complete this tutorial and prototype a working solution.

Scavio has a native LangChain package (langchain-scavio), an MCP server, and a plain REST API that works with any HTTP client. This tutorial uses the raw REST API, but you can adapt to your framework of choice.

Start Building

Pull thousands of Google Reviews for investigative journalism using Scavio Maps search. No official API caps.