Emelyn

Navigation

Learn what happened after the social click.

Tag every campaign consistently, read matching GA4 sessions and key events with read-only access, and use the pattern to choose the next angle—without pretending attribution is perfect.

Campaign learning workspace showing a campaign ID and UTM builder, read-only GA4 property, landing-page report, directional learning, and troubleshooting for stripped UTMs, delayed consent, and direct traffic

Give every social link a stable campaign and content ID.

Google Analytics can only group the visits it receives. Emelyn adds consistent UTM values when it creates the destination link, then keeps those IDs beside the source, draft, channel, and publish record.

utm_source

linkedin

Where the visitor clicked

utm_medium

social

A consistent traffic type

utm_campaign

eml-2026-08-release

The campaign across its posts

utm_content

practical-post-1

The individual post or creative

https://example.com/guide?utm_source=linkedin&utm_medium=social&utm_campaign=eml-2026-08-release&utm_content=practical-post-1

Read the report. Do not manage the property.

Choose a GA4 property that already measures the destination website. Sign in with Google OAuth and grant the analytics.readonly scope. Emelyn does not need permission to edit properties, data streams, users, or key events.

PrerequisitesA GA4 property and web data stream, working website tagging, access to that property, consistent UTM naming, and at least one business-relevant key event if you want more than visit counts.

  1. 01

    Choose the property

    Emelyn lists properties the signed-in account may read. Confirm the website and time zone.

  2. 02

    Grant read-only access

    Authorize https://www.googleapis.com/auth/analytics.readonly and store refresh credentials encrypted.

  3. 03

    Match the naming

    Send a tagged test visit and confirm source, medium, campaign, and content values in DebugView or Realtime.

  4. 04

    Choose the learning window

    Start with 28 complete days ending yesterday. Expect processed reports to change for 24–48 hours.

Read only the rows that can be matched back to a campaign.

The request groups landing pages and sessions by manual campaign and content values. It also asks Google to return quota status so the connection can slow down before it fails.

POST https://analyticsdata.googleapis.com/v1beta/
  properties/GA4_PROPERTY_ID:runReport
Authorization: Bearer <oauth-access-token>
Content-Type: application/json

{
  "dateRanges": [{ "startDate": "28daysAgo", "endDate": "yesterday" }],
  "dimensions": [
    { "name": "landingPagePlusQueryString" },
    { "name": "sessionSourceMedium" },
    { "name": "sessionManualCampaignName" },
    { "name": "sessionManualAdContent" }
  ],
  "metrics": [
    { "name": "sessions" },
    { "name": "keyEvents" }
  ],
  "dimensionFilter": {
    "filter": {
      "fieldName": "sessionManualCampaignName",
      "stringFilter": { "value": "eml-2026-08", "matchType": "BEGINS_WITH" }
    }
  },
  "returnPropertyQuota": true
}

Reporting recipe revision 1.0 · Google Analytics Data API v1beta · Last tested 29 August 2026.

Link or report fieldGA4 fieldMeaning
utm_sourcesessionManualSourceChannel that sent the visit
utm_mediumsessionManualMediumUse a consistent value such as social
utm_campaignsessionManualCampaignNameStable Emelyn campaign ID
utm_contentsessionManualAdContentDistinct post or creative ID
landing page + query stringlandingPagePlusQueryStringDestination first seen in the session
sessionssessionsDirectional visits grouped by the dimensions above
key eventskeyEventsConfigured business actions—not every click

Directional, not perfect attribution.

Emelyn can compare tagged visits and key events between published posts. It cannot prove that one post caused a sale or reconcile every number shown by a social platform.

A useful learning

Practical posts brought more tagged visits and key events than announcement posts. Test another practical angle before changing the whole strategy.

tagged visitskey eventssame date window

UTM stripped

A redirect or script removed the query string before Analytics read the landing page.

Consent delayed

The visit may not be recorded, or the original campaign values may be unavailable when the tag fires.

Direct or unassigned

In-app browsers, privacy controls, copied links, and broken session continuity can hide the source.

A missing row should have an explanation—not a made-up zero.

The connection records when it queried, which date range was complete, whether Google applied thresholds, and whether a report was empty, delayed, unauthorized, or quota-limited.

200 · save snapshot

Store the report window and matched campaign IDs. Refresh recent days later because processing can change.

429 · wait

Use returned quota information and back off. Reduce dimensions, date range, or concurrency before retrying.

401 · reconnect

The OAuth token expired or was revoked. Stop reads and ask the owner to reconnect.

400 · fix report

An incompatible dimension, metric, filter, or property ID will not improve with retries.

QuotaCore reports consume property tokens and concurrent-request capacity. High-cardinality dimensions and long ranges cost more.

PrivacyEmelyn reads campaign-level report rows, not user-level identities. Google may threshold low-volume data.

DisconnectRevoke the Google connection to stop new reads. Remove saved reporting snapshots through the normal Emelyn data-deletion controls.

The gap readers care about is after the click.

Search results and practitioner discussions focus on UTMs, missing sessions, direct traffic, consent timing, and numbers that disagree across platforms. The integration answers those questions and follows the current Data API schema, OAuth scope, quota, and freshness guidance.

Use the numbers to choose the next test—not to claim certainty.

Connect Google Analytics