DEV Community

Cover image for Google Events Tracking: How to Get Concerts and Conferences as JSON in 2026
Truffle Pig Data
Truffle Pig Data

Posted on

Google Events Tracking: How to Get Concerts and Conferences as JSON in 2026

Every concert, conference, festival, and minor-league game in a city eventually shows up in the events panel on Google Search. I wanted that panel as a feed for a side project, and there is no official way to get it: no endpoint, no export, just a JavaScript widget inside a search page. This post covers the manual scrape and where it falls apart, then the shortcut: the Google Events API on Apify, which turns a query like "concerts in Austin" into structured JSON.

Disclosure: the Apify links in this post are affiliate links. If you run the Actor, I may earn a referral commission at no extra cost to you.

Does Google Events have an API?

No. Google Calendar has an API for calendars you own, but the events panel in Search, the one that aggregates listings from ticket sellers and venue pages, has no public API and no feed. That is why searching for a Google Events API mostly turns up scrapers. In practice, a Google Events API is a scraper you consume like an API: send a query, a location, and a date filter, and get titles, dates, venues, and ticket links back as JSON.

What the Google Events API returns

The Google Events API returns event listings for a search query as structured JSON: title, start date, address, venue, ticket links, and an image for each event, about ten events per results page.

Field Example Notes
title "Austin City Limits Music Festival" Event name as listed
date {"start_date": "Oct 3", "when": "Fri, Oct 3, 12:00 PM"} Display strings, not ISO timestamps
address ["Zilker Park", "Austin, TX"] Venue line plus city line
venue {"name": "Zilker Park", "rating": 4.7} Missing on some events, treat as optional
ticket_info [{"source": "Ticketmaster", "link": "...", "link_type": "tickets"}] Seller links, not numeric prices
link https://... Stable key for diffing runs

Each dataset row is one page of results with a nested events array, plus search_metadata (result counts, pages_processed, pagination_limit_reached) and a search_timestamp. Flatten the array before loading a spreadsheet.

Who this is for

City app builders who need a local happenings feed, event marketers watching what competitors book, researchers sizing a music or conference scene, and anyone giving an AI agent live event data.

The manual way, and where it breaks

The DIY version is a headless browser pointed at a search for "events in chicago", clicking into the events panel and parsing cards. It works once, then decays. The panel only renders inside a full browser session, so a plain HTTP request gets you nothing. The date filters are hit chips wired to internal parameters, so "this weekend" is not a URL you can bookmark. Leave the locale unset and Google localizes results to whatever region your proxy exits from, which flips text into another language mid-crawl. And the markup shifts often enough that selectors rot within weeks.

The faster way: run the Google Events scraper

Documented JSON in, documented JSON out, nothing to babysit.

Apify Console

  1. Open the Google Events API and click Try for free.
  2. Type a query like concerts in Austin, optionally with a location and a date filter.
  3. Run it and download the dataset as JSON, CSV, or Excel.

REST

curl -X POST "https://api.apify.com/v2/acts/johnvc~google-events-api---access-google-events-data/runs?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "q": "concerts in Austin", "location": "Austin, Texas, United States", "advanced": "date:weekend", "max_pages": 1 }'
Enter fullscreen mode Exit fullscreen mode

Run endpoint reference: the Apify API docs.

Get Google Events data in Python

from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")

run = client.actor("johnvc/google-events-api---access-google-events-data").call(
    run_input={
        "q": "tech conferences in San Francisco",
        "gl": "us",
        "hl": "en",
        "advanced": "date:month",
        "max_pages": 1,
    }
)

for page in client.dataset(run["defaultDatasetId"]).iterate_items():
    for event in page.get("events", []):
        venue = (event.get("venue") or {}).get("name", "")
        print(event["title"], event["date"]["when"], venue)
Enter fullscreen mode Exit fullscreen mode

Set gl and hl on anything you run twice; without them the locale follows the serving region. The advanced field takes comma-separated tokens like date:today, date:weekend, date:next_week, date:month, or event_type:Virtual-Event, and invalid tokens are rejected at run start before any charges.

Find this weekend's concerts and festivals

The published task Find concerts and festivals in Austin this weekend is the one-city version: date:weekend plus a location, ten events per page, ready to export.

Feed a city app with local sports events

Aggregate local sports events for a city app shows the sports slice: one query per city on a recurring run becomes the data layer behind a "what's on" screen.

Watch conferences in one industry town

Track tech conferences in San Francisco narrows the query to an industry, which is how I would watch a competitor's conference calendar without refreshing a browser tab.

Track a city on a schedule

One run is a snapshot. Track Google Events for a city on a schedule wraps the same input in an Apify Schedule; key each run's events on link and diff against the previous run to catch new and dropped listings.

Use it from Claude and other MCP clients

The Actor is MCP-ready, so Claude, Claude Code, and Cursor can call it mid-conversation through the Apify MCP server (https://mcp.apify.com/?tools=actors,docs,johnvc/google-events-api---access-google-events-data). The task Give an AI agent live Google Events data has the setup, and you can read more about Claude at claude.ai.

FAQ about scraping Google Events

How much does the Google Events scraper cost, and is any of it free?

Billing is per page of results: a small per-run setup fee plus a couple of cents per page, with about ten events on a page. max_pages defaults to 1 and caps spend before a run starts. New Apify accounts come with free platform credit, so early runs usually cost nothing out of pocket.

Can an AI agent run the Google Events scraper?

Yes. Connect the Apify MCP server and the scraper appears as a callable tool in Claude, Claude Code, or Cursor, so "find jazz shows in New Orleans this month" becomes a live query instead of a guess.

Can I schedule the Google Events scraper to watch a city?

Yes, and tracking is the main reason people run it. Save your input as a task, attach a schedule, and diff runs by event link. Start from the Google Events API.

Does the Google Events scraper return ticket prices?

No. ticket_info carries seller links and link types, not numeric prices, so this is not a price tracker. Dates are also display strings like "Fri, Oct 3" rather than ISO timestamps, so parse them client-side before filtering.

Is the Google Events scraper useful for market research?

Yes, within its limits. It inventories upcoming events per city and category, which answers questions like how many festivals a market hosts or how often a venue books shows. It lists upcoming events only; history exists once you start tracking it.

More from Truffle Pig Data

Same Actor, other angles: Google Events API for AI agents on Medium, the Google Events Scraper API write-up on LinkedIn, and how to scrape Google Events into JSON on Peerlist.

Wrapping up

There is no official Google Events API, but a query, a locale, and a date token get you the same data as clean JSON. Point the Google Events API at your own city and see what comes back.

Top comments (0)