# Google Maps Business Posts Scraper (`curious_coder/google-maps-business-posts-scraper`) Actor

Export Google Business Profile posts and updates from any place on Google Maps: text, images, dates, offers and action buttons.

- **URL**: https://apify.com/curious\_coder/google-maps-business-posts-scraper.md
- **Developed by:** [Curious Coder](https://apify.com/curious_coder) (community)
- **Categories:** AI, Real estate, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.30 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

Download the posts and updates that businesses publish on their Google Business Profile — the "Updates", "Offers" and "What's new" cards you see on a place in Google Maps — as a clean spreadsheet or JSON.

No coding needed: paste a business name or a Google Maps link, press Start, and export the results.

### What can it do?

- 📣 **Every post a business has published** — text, photos, publish date and the "Latest updates" you see on the Maps profile
- 🏷️ **Offers and events** — discount posts with their validity dates and coupon details
- 🔘 **Action buttons** — "Book", "Order online", "Learn more", "Sign up", "Call now" — including the link each button points to
- 🔎 **Scrape by search** — "nail salons in Miami", "car dealerships in Los Angeles" — and collect posts from every matching business at once
- 🔗 **Point at one business** — by name, Google Maps link, Place ID or CID
- 🌍 **Any language and country** — get results the way local users see them

### How to use it

1. Add one or more **businesses** — a business name, a Google Maps link, a Place ID or a CID. Or,
2. Enter **search terms** (e.g. `coffee shops in Seattle`) to collect posts from every matching business.
3. Optionally cap the **number of businesses per search** and **posts per business**.
4. Click **Start** and download your data as Excel, CSV or JSON when the run finishes.

### What data do you get?

Every post includes (when available):

| Field | Example |
|---|---|
| Business | Storyville Coffee Pike Place |
| Post type | update / offer / event |
| Title | New 2026 Honda Civic LX |
| Text | One of the unsung heroes of our coffee's journey… |
| Posted | Apr 20, 2026 (and an exact publish date) |
| Image | Direct image link(s) |
| Button | Learn more |
| Button link | https://storyville.com/… |
| Offer validity | Aug 2 – Aug 9 (start and end dates) |
| Post link | Direct link to the post |
| Business address & Google Maps link | 94 Pike St, Seattle, WA 98101 |

### Example

**Input**

```json
{
    "place": ["Storyville Coffee Pike Place"]
}
```

**One row of output (JSON view)**

```json
{
    "postId": "7419284738335585927",
    "postType": "update",
    "title": null,
    "text": "One of the unsung heroes of our coffee's journey from the farm to our Roasting Studio is the humble jute bag…",
    "publishDate": "2026-04-20T16:02:05.000Z",
    "relativeTime": "Apr 20, 2026",
    "imageUrl": "https://lh3.googleusercontent.com/geougc/AF1QipNOhWDUe4TAGgssTLLS…",
    "ctaType": null,
    "ctaUrl": null,
    "postUrl": "https://search.google.com/local/posts?q=Storyville+Coffee+Pike+Place&…",
    "placeName": "Storyville Coffee Pike Place",
    "placeAddress": "94 Pike St Top floor Suite 34, Seattle, WA 98101, United States",
    "placeUrl": "https://www.google.com/maps/place/?q=place_id:ChIJBR3G8LJqkFQRWD2Wzn0qG3c"
}
```

### FAQ

**Which businesses have posts?**
Only businesses that actively use Google Business Profile publish posts. Many small businesses — salons, restaurants, dealerships, gyms — post regularly, while others never do. When a business has no posts, the run simply returns none for it (this is not an error).

**Do I need a Google account or API key?**
No. The scraper works out of the box — no accounts, keys or setup required.

**Can I scrape just one specific business?**
Yes — put its name, Google Maps link, Place ID or CID in the **Businesses** field.

**Is it legal to scrape Google Maps?**
This scraper only collects information that businesses publish publicly to promote themselves. Personal data is not collected. Still, make sure your use complies with local regulations.

# Actor input Schema

## `place` (type: `array`):

One business per line. Paste a Google Maps link, a Place ID (<b>ChIJ…</b>), a CID number, or simply the business name (e.g. <b>Storyville Coffee Pike Place</b>). For a name, the top matching place on Google Maps is used.

## `searchTerms` (type: `array`):

Search Google Maps and collect posts from every matching business. One query per line, e.g. <b>nail salons in Miami</b> or <b>car dealerships in Los Angeles</b>. Use the limit below to control how many businesses each search returns.

## `location` (type: `string`):

City or area added to every search term. With location <b>Miami</b>, the term <b>nail salons</b> becomes <b>nail salons in Miami</b>. Leave empty if your search terms already include a place.

## `maxPlacesPerSearch` (type: `integer`):

For each search term, stop after collecting posts from this many businesses.

## `maxPostsPerPlace` (type: `integer`):

Limit how many posts are saved for each business. Leave at 0 to save every available post.

## `language` (type: `string`):

Language of the results, as a two-letter code such as <b>en</b>, <b>de</b>, <b>fr</b>, <b>es</b>.

## `country` (type: `string`):

Country used for localization, as a two-letter code such as <b>us</b>, <b>gb</b>, <b>in</b>, <b>de</b>.

## Actor input object example

```json
{
  "place": [
    "Storyville Coffee Pike Place",
    "https://maps.google.com/?cid=8582500234709843288"
  ],
  "searchTerms": [
    "nail salons in Miami"
  ],
  "location": "Miami",
  "maxPlacesPerSearch": 10,
  "maxPostsPerPlace": 0,
  "language": "en",
  "country": "us"
}
```

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "place": [
        "Storyville Coffee Pike Place"
    ],
    "maxPlacesPerSearch": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("curious_coder/google-maps-business-posts-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "place": ["Storyville Coffee Pike Place"],
    "maxPlacesPerSearch": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("curious_coder/google-maps-business-posts-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "place": [
    "Storyville Coffee Pike Place"
  ],
  "maxPlacesPerSearch": 10
}' |
apify call curious_coder/google-maps-business-posts-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=curious_coder/google-maps-business-posts-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/TjxyFinfie8gu4e92/builds/JBTmq8mfuGxd2h7OQ/openapi.json
