FIRST MCP FOR FRAMER ANALYTICS

Framer has no
analytics API.
This does. Your AI agent reads your real A/B test numbers — visitors, conversions, uplift, statistical significance. Straight from GA4. No scraping. Nothing to break.

Star on GitHub
4
tools
0
config
MIT
license
GA4
official api
TRAFFIC SPLIT · SIMULATIONLIVE
CONTROL
0 visitors
VARIANT B
0 visitors
0% confidence
// 01

A locked room, by design

Built-in A/B testing, funnels, click tracking — all great, all trapped in the panel.

✕ NO API

No endpoint

Framer's Server API covers CMS content only. Analytics has zero programmatic access — not even read-only.

✕ NO EXPORT

No CSV, no webhook

Results render in a dashboard and exist nowhere else. When a test ends, the history is a screenshot.

✕ NO ECOSYSTEM

Every Framer MCP is design-only

The existing plugins automate the canvas — copy, components, styles. None can read a single metric.

Is there any plan to be able to export the analytics to an external source or potentially get it via API? FRAMER COMMUNITY · DEC 2024 · STILL OPEN
// 02

The data was never locked.
It was in GA4 all along.

Framer stamps the URL when it assigns a variant. GA4 keeps the stamp.

WHAT A VISITOR IN VARIANT B ACTUALLY LANDS ON
sparkmaxx.com/pricing?framer_variant=dXmgUoIf7
GA4 dimension landingPagePlusQueryString keeps that parameter — so every variant is already tracked separately, behind an official Google API.
STEP 01

Framer splits traffic

Visitor assigned to a variant, URL gets stamped.

STEP 02

GA4 records per variant

Visitors and key events, per day, per stamp.

STEP 03

This server does the math

Auto-detects tests, cleans query noise (utm, fbclid), runs a two-proportion z-test.

STEP 04

Your agent answers

"B is +23% at 97% confidence — ship it."

// 03

Four tools. Zero setup.

Tests are detected from live traffic — you never register anything.

list_ab_tests

Every page receiving framer_variant traffic, grouped, with visitors and conversions per variant.

get_test_results

Full table for one page — variants plus untagged baseline — with verdict and visitors still missing.

check_significance

The z-test on any numbers, even pasted from the Framer panel. Uplift, confidence, sample size.

get_top_pages

Top landing pages with visitors, views and conversion rate — health check around every test.

claude · framer-ab-mcp
// 04

The same z-test, running right here

Drag your real numbers in. Identical math to check_significance.

CONTROL · A
VARIANT · B
TEST RUNNING
0% confidence
// 05

Running in three steps

Claude Code, Claude Desktop, Cursor, Windsurf — anything that speaks MCP.

01

Connect GA4 to your Framer site

Site Settings → Integrations. Mark your lead event as a key event.

02

Create GA4 credentials

Enable the Analytics Data API, create a service account, add it as Viewer on the property.

03

Drop it in your MCP config

One block. Then just ask.

{
  "mcpServers": {
    "framer-ab": {
      "command": "npx",
      "args": ["-y", "framer-ab-mcp"],
      "env": {
        "GA4_PROPERTY_ID": "123456789",
        "GOOGLE_APPLICATION_CREDENTIALS": "/path/key.json"
      }
    }
  }
}
// 06

What it is — and isn't

Is this scraping Framer's dashboard?

No. It only calls the official Google Analytics Data API, on data your own site sends to your own GA4 property. Nothing touches Framer's servers — so nothing breaks when Framer ships a redesign.

Does it cover native funnels and CTA click tracking?

No. Those live only inside Framer's panel, which has no API — and this project deliberately stays on the official-API side of that line. If Framer ever ships an analytics API, this server is the natural place to plug it in.

What about visitors from before the test started?

They land without a framer_variant stamp and are reported separately as (baseline), never contaminating variant numbers. Baseline is the default control; override with controlVariantId.

Stop copy-pasting
test results.

OPEN SOURCE · MIT · BUILT FOR THE FRAMER COMMUNITY

github.com/VictorAlexandr/framer-ab-mcp