---
title: "Import from Google Analytics"
description: "Bring your Google Analytics 4 history into RevScope, and see what imported data can and can't show."
url: "https://revscope.co/docs/integrations/google-analytics/"
---

# Import from Google Analytics

An import copies your Google Analytics 4 (GA4) history into RevScope, so your charts don't start on the day you installed the tracking script. It runs once, in the background, for a date range you choose. It doesn't keep syncing afterwards, and it never changes anything in your Google Analytics account. Only account admins can start or remove an import.

## What you get, and what you don't

Google Analytics only hands out daily totals, such as "40 sessions on `/pricing` on March 3" or "100 sessions from Germany on March 3". It doesn't give out the individual visits behind those numbers. RevScope stores the totals as they are rather than inventing visits to match, and that one fact explains most of what follows. Because each total describes one thing at a time, RevScope can tell you how many sessions came from Germany, and how many viewed `/pricing`, but not how many sessions from Germany viewed `/pricing`.

An import brings in these daily numbers:

- Total sessions, pageviews, bounces, and time on site
- Sessions, pageviews, and time on each page
- Sessions, bounces, and time for each landing page
- Sessions by referrer, channel, and UTM campaign
- Sessions by country, region, and city
- Sessions by device type, browser, and operating system
- Custom events on each page, leaving out the ones GA collects by itself, such as `page_view`, `scroll`, and `click`

A GA session becomes one visitor in RevScope, since RevScope counts a visitor per session. GA calls a session engaged when it lasts at least 10 seconds or views a second page, and any other session counts as a bounce here, which is the same rule RevScope applies on the Overview tab.

Screen sizes, languages, GA's user counts, and GA's ecommerce revenue are not imported. Connect a [payment integration](https://revscope.co/docs/integrations.md) for revenue, and [Search Console](https://revscope.co/docs/integrations/google-search-console.md) for search terms.

## Where imported data shows up

Imported numbers are added to tracked ones on the Overview tab and its breakdown panels, and on the Audience, Pages, and Events tabs. The Overview chart shades the imported range and labels it.

Some views need individual visits or payments, so they leave imported data out: Revenue, Sources, Campaigns, Visitors, Funnels, and page transitions. The same goes for any view with a filter applied, since a filter asks exactly the kind of combined question daily totals can't answer. When a view leaves out imported data that exists for the selected dates, a note under the tabs says so. If you filter the Overview to one country, for example, the numbers drop to tracked sessions only and the note appears.

Rates need more care where the two kinds of data mix. Imported sessions have no revenue attached, so counting them in a conversion rate would make it look worse than it was. Conversion rate and revenue per visitor therefore use tracked sessions only, on every tab, even though the visitor count beside them includes imported ones. On the Overview chart those two lines are blank for days that only have imported data.

Bounce rate also depends on the tab. GA can only report bounces for the page a session landed on, so landing pages include imported bounces, while the bounce and exit rates on the Pages tab use tracked sessions only.

If you'd rather see tracked data alone, clear **Include imported data in reports** in Settings. This hides imported data from the dashboard without deleting it, and you can turn it back on whenever you like. Ask AI and MCP clients can still query it.

## Connect your Google account

The import section is in [Settings](https://revscope.co/settings), for each project. There are two ways to give RevScope read access to GA.

**Connect with Google** is the quick way. You sign in with a Google account that can see the property and approve read-only access to Google Analytics. Self-hosted instances only show this button after [some setup](#self-hosting).

A **service account** takes longer to set up, but doesn't depend on anyone's personal Google account, and it's the same kind of credential the [Search Console integration](https://revscope.co/docs/integrations/google-search-console.md) uses. To create one:

1. In [Google Cloud Console](https://console.cloud.google.com/), pick or create a project. Under **APIs & Services → Library**, enable both the **Google Analytics Data API** and the **Google Analytics Admin API**.
2. Under **IAM & Admin → Service Accounts**, create a service account with no project roles. Then open it and choose **Keys → Add key → Create new key → JSON** to download its key file.
3. In Google Analytics, open **Admin → Property access management** on the property you want to import, and add the service account's email (`client_email` in the key file) with the **Viewer** role.
4. Paste the whole key file into **Service account JSON key** in Settings and choose **Connect service account**.

RevScope keeps your credential, encrypted, only as long as it needs it. It deletes the credential when the import finishes, fails, or is cancelled, and if you connect but never start an import, it deletes it after two hours. With Connect with Google, it also asks Google to cancel the access it was given, once no other import is using that Google account. A later import means connecting again.

## Choose what to import

Once connected, the form asks for four things.

**Property** is the GA4 property to read. The list holds every property your credential can see. If it's empty, the credential has no access yet, which for a service account usually means step 3 above was missed or was done on a different property.

**From** is the first day to import. It starts at the oldest date your plan keeps, and you can't go further back, because data older than your plan's retention isn't meant to be kept. Free keeps 6 months, Starter 2 years, and Growth 5 years. Self-hosted has no limit, so the field starts at October 14, 2020, when GA4 launched.

**To** is the last day to import. It starts at the day before RevScope's first tracked pageview, because that first day is usually partial and GA already counted those visits too. A project with no tracking yet starts at yesterday. Today can't be imported because its numbers aren't final.

If RevScope has been tracking for longer than your plan keeps data, no range can avoid duplicates. The form says so, and **Start import** stays disabled until you choose an end date yourself.

You can choose a later end date, but the form will warn you first. On every day both GA and RevScope were running, the same visits get counted once by each, so visits and pageviews on those days are doubled. Suppose RevScope started tracking on August 10 and you import through August 31: all 22 of those days show about twice their real traffic.

**Hostnames** limits the import to traffic on the sites you list, separated by commas. It starts with the hostnames RevScope has already seen for this project, or empty if there are more than 50. This matters when one GA property covers several sites, or collects hits from staging servers you don't want in your reports. Leave it empty to import every hostname on the property.

## While an import runs

Choosing **Start import** starts a background job, and you can close the page. It works from your newest month back to your oldest, so recent history appears first, and Settings shows how far it has got. A project runs one import at a time. Imports don't count toward your plan's monthly events.

Google limits how much data each property can request per hour and per day. A long range on a busy site can reach that limit, in which case the import shows as paused and tries again at the start of each hour until it can continue, which may take until the next day. You don't need to do anything. Other tools reading the same property share that limit.

If Google refuses access partway through, for example because someone removed the service account from the property, the import stops and shows the reason. The months already imported stay until you delete them.

## Cancel, delete, and import again

**Cancel** stops a running import and keeps what it has imported so far. **Delete** removes all of an import's numbers from your reports, and is only available once it has stopped.

Two imports can't cover the same date, even from different properties, because their numbers would add up to double. To redo a range or to resume a cancelled or failed import, delete it and start again. You can also import a separate, earlier or later range alongside one you already have.

## Limitations

- **Days, not hours.** Each imported day counts as a whole, at the first moment of that day. In an hourly chart, its traffic all lands in the first hour, and a date range that starts partway through a day leaves that day out.
- **Day boundaries can shift.** Days are taken as GA reports them, in the property's timezone, and placed on the same calendar date in your project's timezone. If the two differ, a day's traffic can be a few hours off from where RevScope would have put it.
- **Totals may not add up exactly.** Each breakdown is its own report from GA. On high-traffic sites GA can group rarely seen pages into a row called `(other)`, which RevScope leaves out, so page counts can come in below the site total. GA may also estimate from a sample or hide small counts to protect privacy, and those adjustments carry over.
- **Regions stay as GA names them.** Countries and cities merge with tracked data, but imported regions aren't shown in reports, because GA names them ("New York") where RevScope uses codes ("NY").
- **Events need a page.** RevScope reports each event on the page it fired on, so an event GA has no page for, such as one sent from a server, isn't imported.
- **Names remain after a delete.** Deleting an import removes its numbers, but the page, referrer, campaign, and event names it introduced can still appear in places like the funnel editor's page list and the Campaigns tab, with no visits against them.
- **Only GA4.** Google deleted Universal Analytics data in 2024, so there is nothing older to import.

## Self-hosting

Service accounts work without any setup. To show **Connect with Google** as well, create an OAuth web client in Google Cloud Console and add `https://your-domain/oauth/google-analytics` as an authorized redirect URI, using the same address as `REVSCOPE_WEB_BASE_URL`. Enable the Google Analytics Data and Admin APIs on the same project. Then set `REVSCOPE_GOOGLE_CLIENT_ID` and `REVSCOPE_GOOGLE_CLIENT_SECRET`. Until Google has verified your app for the Analytics read-only scope, people signing in see a warning screen, and you'll need to list them as test users.

See all [integrations](https://revscope.co/docs/integrations.md), or connect [Search Console](https://revscope.co/docs/integrations/google-search-console.md) for search terms.
