Skip to main content

megaton

PyPI version Python 3.11+ License: MIT

Megaton is a Python and CLI toolkit for Google Analytics 4, Search Console, Google Sheets and BigQuery. Run a single query without an application checkout; use the same operations from scripts, Notebooks and MCP adapters.

Python and CLI

pip install megaton
megaton query --params query.json --credential /path/to/google.json --output result.csv
megaton resources gsc --credential /path/to/google.json
python -m megaton query --params query.json --validate-only

query.json selects the resource and dates explicitly:

{
  "schema_version": "1.0",
  "source": "ga4",
  "property_id": "123456789",
  "date_range": {"start": "2026-01-01", "end": "2026-01-31"},
  "dimensions": ["date"],
  "metrics": ["sessions"]
}
from megaton.query import run_query

result = run_query(params, credential="/path/to/google.json")
df = result.df
result.save("result.csv")

The core package provides single Google queries; megaton-app adds multi-step workflows, Adobe, jobs, audits, validation and delivery. See the machine interface contract for GSC/BQ requests, authentication, JSON output and MCP integration. These commands are available from 2.3.0.

Core Concepts

Version 2.2.0 includes reliability changes. GA4/GSC query errors and Sheets read/upsert errors now raise instead of looking like empty results. Sheets overwrite uses one atomic request; structural mutations are submitted once. See failure handling and migration before upgrading scheduled jobs from 2.1.3.

  • Result objects — Method chaining via SearchResult / ReportResult
  • Simple flow — Open → Set dates → Run → Save
  • Shared operations — Explicit machine requests and interactive Notebook sessions

Quick Start

Prerequisites

You need a Google Cloud service account JSON file with access to GA4, Search Console, or Sheets. See Google Cloud docs for how to create one.

Install

pip install megaton              # core (headless / programmatic use)
pip install megaton[notebook]    # + ipywidgets for the interactive selection UI

ipywidgets is no longer a core dependency (since 2.0). Install the notebook extra when you want the widget-based credential/account/property picker used by Megaton(...) in Jupyter/Colab. For scripts, CI, or headless runs, the core install is enough — use Megaton(..., headless=True), Megaton.for_property(...), or Megaton.for_site(...).

Run a GA4 report and save to Google Sheets

For normal Sheets work, use one flow: mg.open.sheet(...) opens a Spreadsheet, mg.sheets.* selects or manages Worksheets, and mg.sheet.* operates on the selected Worksheet.

from megaton.start import Megaton

# Interactive (Jupyter/Colab): needs megaton[notebook] for the picker UI.
mg = Megaton("/path/to/service_account.json")
# Scripts/CI (core install, no widgets): select the property up front.
# mg = Megaton.for_property("YOUR_GA4_PROPERTY_ID", "/path/to/service_account.json")

# GA4: fetch event data
mg.report.set.dates("2024-01-01", "2024-01-31")
result = mg.report.run(d=["date", "eventName"], m=["eventCount"])

# Save to Google Sheets
mg.open.sheet("https://docs.google.com/spreadsheets/d/...")
mg.sheets.select("_ga_data")
mg.sheet.save(result)
mg.sheet.freeze(rows=1)
mg.sheet.resize(rows=1000, cols=20)
mg.sheet.gridlines.hide()
mg.sheet.tab.color("#2f80ed")

Run the same report over multiple date ranges

df = mg.report.run.ranges(
    date_ranges=[("2024-01-01", "2024-01-31"), ("2025-01-01", "2025-01-31")],
    d=["date", "eventName"],
    m=["eventCount"],
)

Read a worksheet as DataFrame

mg.open.sheet("https://docs.google.com/spreadsheets/d/...")
daily_df = mg.sheets.read("daily")

Duplicate a worksheet and patch a cell

mg.open.sheet("https://docs.google.com/spreadsheets/d/...")
mg.sheets.duplicate(
    "template",
    "report_2024_02",
    cell_update={"cell": "B1", "value": "202402"},
)

Search Console with method chaining

# query_map: dict mapping regex patterns to category names
# e.g. {"brand.*keyword": "Brand", ".*": "(other)"}
result = (mg.search
    .run(dimensions=['query', 'page'], clean=True)
    .categorize('query', by=query_map)
    .filter_impressions(min=100)
)

mg.open.sheet("https://docs.google.com/spreadsheets/d/...")
mg.sheets.select("_query")
mg.sheet.save(result, sort_by="impressions")

Installation

# From PyPI
pip install megaton

# Latest from GitHub
pip install git+https://github.com/mak00s/megaton.git

Documentation

Note: Detailed docs are written in Japanese.

If you're new, start with the cookbook for practical examples, then refer to the API reference for details.

Doc Description
cookbook.md Practical recipes — start here
api-reference.md Full API reference (single source of truth)
cheatsheet.md One-line quick reference
design.md Design philosophy and trade-offs

Testing & Coverage

pytest --cov=megaton --cov-report=term-missing

Changelog

License

MIT License

Metadata

Release files for megaton 2.3.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for megaton 2.3.0
File Size Uploaded
megaton-2.3.0.tar.gz 189.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for megaton 2.3.0
File Interpreter ABI Platform
megaton-2.3.0-py3-none-any.whl Python 3 none any Details

Total release size: 311.8 kB

Release files / megaton-2.3.0.tar.gz

Download URL megaton-2.3.0.tar.gz
Size 189.0 kB
Tags Source
SHA-256 checksum
How to use checksums
cfc286d67c9e8255af8bfcebf297aed8e0c676fe460d384a7103b9660795353b
BLAKE2b-256 checksum
How to use checksums
90ee7f2bed320701d41663fd55e83f6a263228ea5edfc75facaaae626f9c5ccf
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 13, 2026.

Transparency log

Release files / megaton-2.3.0-py3-none-any.whl

Download URL megaton-2.3.0-py3-none-any.whl
Size 122.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
c0d3f71af0f6eedd826ae8a7713f577e0aad4fedbba528f040c2c99bbbec5037
BLAKE2b-256 checksum
How to use checksums
3d3ba55e0dabf62a73327c8317cda844ae8a3e0504fa3415dd600404fb92890a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 13, 2026.

Transparency log

Release history Release notifications | RSS feed

2.4.0

2 release files

This release

2.3.0 This release

2 release files

2.2.0

2 release files

2.1.3

2 release files

2.1.2

2 release files

2.1.1

2 release files

2.1.0

2 release files

2.0.1

2 release files

2.0.0

2 release files

1.5.0

2 release files

1.4.3

2 release files

1.4.2

2 release files

1.4.1

2 release files

1.4.0

2 release files

1.3.0

2 release files

1.2.0

2 release files

1.1.0

2 release files

1.0.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page