← Back to Events

First Visit

Also known as: first_visit, New User Event, First Session Marker, New Visitor

AcquisitioneventE-commerce: Top-of-Funnel & Marketing AcquisitionAcquisitionGA4E-commerce

First Visit is the GA4 first_visit event, collected automatically the first time a browser or app instance loads the measurement tag with analytics storage available, and it marks the acquisition moment that starts a user's lifecycle on the digital property. It is deliberately narrower than session_start, which fires at the beginning of every session including the first: first_visit fires once in the lifetime of a client identifier, which is why New Users, New vs Returning User and First Touch Channel Grouping are built on it rather than on session counts.

Event Serialization

once per user

Business Use Case

1️⃣ The Acquisition Marketing manager reviews first_visit volume split by first-touch source/medium, campaign and landing page in the Monday channel stand-up, and shifts paid budget toward the channels that actually deliver new users instead of re-engaging the existing base. 2️⃣ The Lifecycle/CRM team anchors acquisition cohorts on the first-visit date to track time to first purchase and cohort value by entry channel, and uses that to set the send date and offer strength of the welcome programme. 3️⃣ The Merchandising team builds a first-visit audience to serve new-visitor landing experiences and first-order incentives, then compares its conversion against returning visitors before rolling the treatment sitewide. 4️⃣ Marketing Operations monitors the first_visit to session_start ratio daily; a spike in first_visit without a matching session_start movement triggers a tagging review for duplicate configuration tags, cookie churn or a consent-banner change before the numbers reach the executive dashboard.

Business Criticality

High

Journey / Navigation Area

Onboarding

Owning Function

Marketing

Calculation Notes

1️⃣ Firing condition — the event is emitted by the GA4 tag itself, not by page code: on web it accompanies the first page_view of the first session when no analytics cookie is present for the property; on app streams it fires on the first open after install. It always co-occurs with a session_start carrying ga_session_number = 1, and it must never be pushed manually alongside the automatic one. 2️⃣ Serialization and dedupe — once per client identifier (web cookie or app instance id), enforced on the device rather than by a server-side check. Report it as distinct identifiers carrying the event, never as an event count, so a duplicated GA4 configuration tag or a double-loaded container cannot inflate New Users. 3️⃣ Identity caveat — because the gate is the client identifier, cookie clearing, private browsing, ITP/ETP storage capping and any browser or device switch all mint a second first_visit for the same human. Treat it as a per-browser acquisition marker; a person-level "new customer" requires stitching to user_id or the CRM customer record and must be labelled as such in every report. 4️⃣ Required versus optional parameters — nothing is required of the implementation team beyond correct tag placement; the value sits in the automatic context (ga_session_id, ga_session_number, page_location, page_referrer and the resolved source/medium/campaign) that freezes first-touch attribution. Never overwrite those traffic-source values on later events and never add custom parameters that restate them. 5️⃣ Consent and PII — under Consent Mode v2 with analytics_storage denied no identifier is written, so the visit arrives cookieless and first_visit is suppressed or behaviourally modelled; New Users in consent-restricted markets is therefore a modelled floor, not a count. No email, hashed email, order id or other personal field belongs on this event, and it must not be reconstructed server-side from a PII-derived key. 6️⃣ Common instrumentation mistakes — renaming or hand-firing first_visit, mapping it to account creation (that is sign_up), or firing it on every new session (that is session_start); each breaks the once-per-user contract and corrupts every cohort built on it. 7️⃣ Timing and exclusions — apply the property's internal-traffic and developer-traffic filters before publishing counts, exclude known bot and synthetic-monitoring identifiers, and anchor cohorts on the user's first-touch timestamp rather than the event date, since queued app events and offline sessions can land the hit a day or more after the visit actually happened.

Platform Events

PlatformEvent
Google Analytics 4first_visit
Adobes.t() first page view beacon of the visitor's first hit (new visitor is derived server-side from the Experience Cloud ID cookie; no custom link is sent)

Data Mappings

W3 Data Layer
{
  "digitalData": {
    "pageInstanceID": "prod-web-home",
    "page": {
      "pageInfo": {
        "pageID": "home",
        "pageName": "Home | Example Shop",
        "destinationURL": "https://www.example-shop.com/",
        "referringURL": "https://www.google.com/",
        "sysEnv": "mobile",
        "language": "en-us",
        "issueDate": "2026-08-02"
      },
      "category": {
        "primaryCategory": "Acquisition",
        "subCategory1": "Top-of-Funnel & Marketing Acquisition",
        "pageType": "home"
      },
      "attributes": {
        "sessionID": "1785688867",
        "sessionNumber": 1,
        "entryPage": "/",
        "visitorStatus": "new"
      }
    },
    "user": [
      {
        "profile": [
          {
            "profileInfo": {
              "profileID": "a1c9f0e2-7b64-4f31-9a2d-5e0c8d13b7aa",
              "returningStatus": "new",
              "firstVisitTimestamp": "2026-08-02T16:41:07.000Z",
              "language": "en-us"
            }
          }
        ]
      }
    ],
    "event": [
      {
        "eventInfo": {
          "eventName": "First Visit",
          "eventAction": "first_visit",
          "type": "user",
          "timeStamp": "2026-08-02T16:41:07.000Z",
          "effect": "user lifecycle started"
        },
        "category": {
          "primaryCategory": "Acquisition"
        },
        "attributes": {
          "sessionID": "1785688867",
          "sessionNumber": 1,
          "source": "google",
          "medium": "organic",
          "campaign": "(organic)",
          "landingPage": "/",
          "referrer": "https://www.google.com/",
          "consentState": "granted"
        }
      }
    ]
  }
}
GA4 Data Layer
{
  "event": "first_visit",
  "ga_session_id": "1785688867",
  "ga_session_number": 1,
  "engagement_time_msec": 0,
  "page_location": "https://www.example-shop.com/",
  "page_referrer": "https://www.google.com/",
  "page_title": "Home | Example Shop",
  "source": "google",
  "medium": "organic",
  "campaign": "(organic)",
  "language": "en-us",
  "consent_state": "granted"
}
Adobe Client Data Layer
{
  "event": "web.webpagedetails.pageViews",
  "eventInfo": {
    "path": "page",
    "eventType": "first page view of a new visitor",
    "timestamp": "2026-08-02T16:41:07.000Z"
  },
  "web": {
    "webPageDetails": {
      "name": "Home | Example Shop",
      "URL": "https://www.example-shop.com/",
      "siteSection": "home",
      "server": "www.example-shop.com",
      "isHomePage": true,
      "pageViews": {
        "value": 1
      }
    },
    "webReferrer": {
      "URL": "https://www.google.com/",
      "type": "external"
    }
  },
  "environment": {
    "type": "browser",
    "browserDetails": {
      "name": "Chrome",
      "acceptLanguage": "en-us",
      "viewportWidth": 390,
      "viewportHeight": 844
    }
  },
  "placeContext": {
    "localTime": "2026-08-02T11:41:07-05:00"
  },
  "visit": {
    "visitNumber": 1,
    "visitStart": true,
    "entryPage": "/"
  },
  "visitor": {
    "isFirstVisit": true,
    "returningStatus": "new",
    "firstVisitTimestamp": "2026-08-02T16:41:07.000Z"
  }
}
XDM Mapping
{
  "eventType": "web.webpagedetails.pageViews",
  "timestamp": "2026-08-02T16:41:07.000Z",
  "identityMap": {
    "ECID": [
      {
        "id": "79876066103567143511267739748305347425",
        "primary": true,
        "authenticatedState": "ambiguous"
      }
    ]
  },
  "channel": {
    "_id": "https://ns.adobe.com/xdm/channels/web",
    "_type": "https://ns.adobe.com/xdm/channel-types/web",
    "typeAtSource": "web"
  },
  "web": {
    "webPageDetails": {
      "name": "Home | Example Shop",
      "URL": "https://www.example-shop.com/",
      "siteSection": "home",
      "server": "www.example-shop.com",
      "isHomePage": true,
      "pageViews": {
        "value": 1
      }
    },
    "webReferrer": {
      "URL": "https://www.google.com/",
      "type": "external"
    }
  },
  "environment": {
    "type": "browser",
    "browserDetails": {
      "name": "Chrome",
      "acceptLanguage": "en-us",
      "viewportWidth": 390,
      "viewportHeight": 844
    }
  },
  "placeContext": {
    "localTime": "2026-08-02T11:41:07-05:00",
    "geo": {
      "countryCode": "US",
      "stateProvince": "US-TX"
    }
  },
  "_experience": {
    "analytics": {
      "endUser": {
        "isFirstVisit": true,
        "firstTimestamp": "2026-08-02T16:41:07.000Z",
        "firstWeb": {
          "webPageDetails": {
            "name": "Home"
          },
          "webReferrer": {
            "URL": "https://www.google.com/"
          }
        }
      },
      "session": {
        "num": 1,
        "depth": 1,
        "timeSpent": 0
      },
      "customDimensions": {
        "eVars": {
          "eVar1": "(organic)",
          "eVar2": "google | organic",
          "eVar3": "/"
        }
      }
    }
  }
}

Source Data

Digital Analytics (GA4)

Dependencies

Prerequisite: List the dependencies required for this Event

Report Attributes

First Touch Channel Grouping Default Channel Grouping Campaign Name Landing Page Device Category Country/Region

Segment Eligibility

true

Governance

Data SensitivityInternal

Dimensions

Derived Entities

Derived Metrics

Governance & Metadata

Created bydevyendarm
Created on9/20/2026
Last modified bydevyendarm
Last modified on9/21/2026
Version1.0.0
Validation stateqa passed
StatusPUBLISHED

GitHub

View related Pull Requestcatalog/events/first-visit.yml

Community Discussion