← All playbooks
Analytics migration

Google Analytics 4 → Matomo

Import GA4 reports into a new Matomo site, then track there. The import cannot be merged into a site you already created, and it is aggregated history, not the raw visits.

Typical timeline1 to 3 weeks8 to 20 hours active work
Statusneeds review
Source profileMatomo GA4 import command and limit docs reviewed 2026-11-02
Destination profileMatomo import FAQ and switching workflows reviewed 2026-11-02
Documentation date
Review window
Evidence5 sources
This route needs review.Use it as a planning baseline, then verify the dated sources and test with representative data before production.
Before you migrate

Should you make this move?

Both platforms have a case. Compare what you gain with what you give up before scheduling the cutover.

Current platform

Google Analytics 4

Reasons to stay
  • Event-based measurement connects web, app, audiences, and Google advertising
  • Established reporting patterns make recurring measurement easier
Reasons to leave
  • Its data model and reporting interface are difficult for many teams to govern
  • Tracking quality still depends on disciplined implementation and governance
New platform

Matomo

What gets better
  • Data ownership, self-hosting, and privacy controls support compliance-sensitive teams
  • Established reporting patterns make recurring measurement easier
What gets worse
  • Operating it well requires infrastructure, upgrades, and analytics expertise
  • Tracking quality still depends on disciplined implementation and governance
Best of the move

Matomo: Data ownership, self-hosting, and privacy controls support compliance-sensitive teams. This removes a major source-side concern: Its data model and reporting interface are difficult for many teams to govern.

Worst of the move

What you lose: Event-based measurement connects web, app, audiences, and Google advertising. What you inherit: Operating it well requires infrastructure, upgrades, and analytics expertise.

Jump to a section
01At a glance

Know the shape of the move.

Transfer outcome12 features audited
Transfer outcome distributionClean transfer: 1, Partial transfer: 6, Manual rebuild: 2, Not transferred: 3.
Clean1
Partial6
Manual2
Lost3
Mapping route7 of 10 fields have a destination path

This timeline assumes

  • The property is GA4. Universal Analytics is a different route, Google Analytics → Matomo. GA4 → Plausible is also separate.
  • You can authorize the Google Analytics Importer. Matomo Cloud has it installed. A self-hosted site needs the plugin.
  • You want history in the same Matomo site that will collect new hits, so the import starts before that tracking code.
  • Google's API quotas are part of the plan. Matomo says the import pauses and continues across days.
  • GA4 stays available until you have compared a day of native Matomo data with GA4.
02What transfers

What survives the move.

“Partial” and “manual” are not footnotes. They are work that must be scheduled and verified.

ItemOutcomeImpactWhat happensMitigation
A new Matomo sitepartialcriticalStarting an import creates a new Matomo website. Matomo says the import cannot go into an existing website and cannot be merged later. If you already tracked into a test site, that data stays separate.Import first. Use the tracking code of the site the importer created.
GA4 property idmanualcriticalThe on-premise GA4 command is php ./console googleanalyticsimporter:import-ga4-reports --property="properties/PROPERTY_ID" --dates=START,END. Resume with --idsite set to the site id from the import status table.Copy the property id from the GA4 property selector before you start.
Cloud authorizationpartialhighMatomo Cloud's Quick Connect path is the one they recommend for small and medium sites. High-traffic or multi-site imports use the advanced OAuth client for higher API limits. Google may say the app is unverified. Matomo tells you to continue through Advanced to matomo.cloud.Pick Quick Connect or the OAuth client before the first click on Import properties.
API quotapartialhighGoogle's limit in Matomo's run guide is at most 50,000 requests a day for the account and at most 10,000 for a site. Matomo says that is about 4 months of days that contain data, and that slice can finish in a couple of hours. The rest waits until the next day. The job resumes.Leave the import scheduled. A pause is the quota, not a failed job.
End date versus live trackingmanualcriticalMatomo's simple switch sets the import end date to the day before tracking starts. Their example is tracking on 12 November and an end date of 11 November. You can add the tracking code during the import. Overlap double-counts. A rolling import with no end date keeps copying GA4 until you cancel it, and days between cancel and going live are empty.Write the end date and the first tracked day next to each other.
Raw visitslostcriticalThe importer brings aggregated reports, not raw visit and action rows. Visitor Log, Ecommerce Log, custom reports, and segmentation do not work on the imported period. Unique visitors for weeks and months are unavailable. The importer walks backward from yesterday, then imports forward.Treat imported months as reports. Use log-level questions only on days Matomo tracked itself.
Metrics that use different definitionspartialhighMatomo says Google's ecommerce conversion rate is transactions per session, while Matomo's is the percent of visits with at least one order, so that metric is not imported. Entrance and exit rates also differ, and can show over 100 percent because of how GA counts sessions. GA4 goals import without goal name, revenue, or conversion rate. Item-scoped custom dimensions are ignored.Rebuild goals in Matomo. Do not compare those rates to GA4 as if they were the same formula.
Reports Matomo will not filllostmediumSearch keywords with no results, and the Contents report, are Matomo reports Google does not supply. Funnels are an example of a Google report the importer does not bring. Site-search URLs can land in page URL reports because Google strips the search parameter.List the reports people actually open, and mark which ones stay blank.
GeoIPpartialmediumMatomo says the importer assumes GeoIp2. Without it, regions show as Unknown even though the import itself worked.Install GeoIp2 before you judge a map.
Page-level totalspartialhighOn 17 February 2026, forum user CJ406 reported a GA4 property of about 3 million pageviews a year. The import finished in about 4 hours and monthly totals looked right, while some URLs were far below GA4. Examples they gave for 90 days included 465 versus 35, 167 versus 51, and 253 versus 43. Other URLs matched, including 24,064 versus 24,064. They said the GA4 API was not thresholding, and the missing rows were not in Matomo's log tables. That is one site, not a documented limit.Compare a sample of URLs, not only the month total, before you turn GA4 off.
Authorization after the importcleanlowMatomo says you can remove the Google authorization when the import is done. It is only needed while data is copying.Remove it after the end date has passed and the checks are done.
The GA4 property itselflostmediumAudiences, explorations, and the GA4 interface stay in Google. The importer does not move them.Export any exploration you still need as a reference before the property is closed.
03Field and feature mapping

Where each thing goes.

SourceDestinationMethodNotes
GA4 propertyNew Matomo siteautomaticCreated when the import starts. Not an existing site.
Property id--property=properties/IDtransformOn-premise CLI. Cloud uses Import properties after connect.
Date rangeImport start and endmanualEnd the day before native tracking if you want one continuous site.
Aggregated reportsMatomo reportsautomaticNot raw visits.
Visitor log and segmentsNo destinationunsupportedUnavailable on imported reports.
Ecommerce conversion rateNo destinationunsupportedDefinitions differ, so Matomo does not import it.
GA4 goalGoal without name, revenue, or ratetransformRebuild the goal in Matomo.
Item-scoped custom dimensionNo destinationunsupportedIgnored. Visit and action scopes are the ones Matomo keeps.
Tracking codeCode for the imported site idmanualAdd it only with an end date that does not overlap.
Google OAuth grantRemoved after importmanualMatomo says it is unused once copying stops.
04Before you begin

Make the move recoverable.

Backup procedure

Create the source-of-truth backup

Keep GA4 available until a day of native Matomo data has been compared.

  1. Write down the GA4 property id and timezone.
  2. Export the explorations you still cite.
  3. Note any Matomo site you already created, so you do not expect a merge.
  4. Leave the GA4 tag in place until the end date is set.
  5. Save the Matomo site id the importer creates.

Proof to capture: A property id, a list of reports you must rebuild, and the new Matomo site id.

Transformation · Google Analytics Importer

History import

Fill a new Matomo site with GA4 reports up to a chosen day.

  1. On Cloud, use Quick Connect or the advanced OAuth client, then Import properties.
  2. On premise, run import-ga4-reports with the property id and a date range.
  3. Let the job cross days when it hits the 10,000 request site limit.
  4. Resume with --idsite if you start the CLI again.

Proof to capture: Save the input, output, command or tool settings, warnings, and final item counts.

Transformation · The tracking code of the imported site

Tracking switch

Collect new hits in Matomo without overlapping the import.

  1. Set the import end date to the day before the first tracked day.
  2. Add that site's tracking code.
  3. Compare URL samples, not only the monthly total.
  4. Remove the Google authorization after the import status is finished.

Proof to capture: Save the input, output, command or tool settings, warnings, and final item counts.

05Handle with care

The things most likely to hurt.

These are operating limits. Treat every “Stop if” condition as a blocked migration, not a suggestion.

Pilot

The import lands in the wrong site

criticallikely likelihood

You already have a Matomo site from a test tag, and you expect the import to join it.

Consequence
Matomo creates another site. The two cannot be merged.
Mitigation
Start the import on an empty Matomo, then use the new site id.

Stop if: Someone has already published the tracking code for a different site id.

Cutover

The end date overlaps live tracking

criticalpossible likelihood

The tag is live on a day the importer also copies.

Consequence
That day is counted twice, or a gap opens if you cancel a rolling import too early.
Mitigation
Use Matomo's example: end date the day before tracking starts.

Stop if: You cannot name those two dates.

Verify

Month totals hide missing URLs

highpossible likelihood

The month looks close to GA4 and a quiet URL does not.

Consequence
CJ406 saw that pattern after a completed import. You would turn GA4 off on a bad page report.
Mitigation
Compare high and low URLs before you remove the GA4 tag.

Stop if: The only check is the monthly total.

06Precise timeline

Do the work in this order.

Estimate forOne GA4 property imported into Matomo, then tracked natively
Total elapsed1 to 3 weeks
Active work8 to 20 hours
BufferA multi-year property waits on the daily API quota. Matomo says that wait is normal.
01
Days 1 to 2Property and reports1 to 2 days
02
Day 2Keep GA41 day
03
Days 2 to 10Import historySeveral days of quota
04
Days 10 to 12Track on the new site1 to 2 days
05
Days 12 to 20Parallel readAbout a week
  1. Days 1 to 2 · inventory

    Property and reports

    3 to 6 hours active1 to 2 days elapsedAccess to GA4 and Matomo waiting
    • Copy the property id.
    • List reports that will not import.

    Depends on: GA4 admin

    Stop / go checkpoint

    Authorize the importer?

    Go when: You know this is a new Matomo site.

    Stop when: A test site must be merged and cannot be.

  2. Day 2 · backup

    Keep GA4

    1 to 2 hours active1 day elapsedNone waiting
    • Export explorations you still need.
    • Leave the GA4 tag up.

    Depends on: Property id

    Stop / go checkpoint

    Start the import?

    Go when: GA4 still answers for the date range you will copy.

    Stop when: The property is already closed.

  3. Days 2 to 10 · pilot

    Import history

    2 to 6 hours activeSeveral days of quota elapsedGoogle API daily limits waiting
    • Start Quick Connect or the CLI.
    • Record the new site id.
    • Let the job resume after the quota.

    Depends on: Authorization

    Stop / go checkpoint

    Set an end date?

    Go when: Reports are appearing on the new site.

    Stop when: The job stopped and was not resumed with --idsite.

  4. Days 10 to 12 · cutover

    Track on the new site

    2 to 4 hours active1 to 2 days elapsedThe first full day of hits waiting
    • Set the end date to the day before go-live.
    • Add the tracking code for that site id.
    • Compare URL samples.

    Depends on: Import in progress or finished

    Stop / go checkpoint

    Remove the GA4 tag?

    Go when: A full day of native data looks plausible next to GA4, and imported URLs were sampled.

    Stop when: Only the month total was checked.

  5. Days 12 to 20 · observe

    Parallel read

    2 to 4 hours activeAbout a week elapsedMore than one day of traffic waiting
    • Keep GA4 readable.
    • Rebuild goals.
    • Remove the Google grant when the import is done.

    Depends on: Native tracking

    Stop / go checkpoint

    Stop opening GA4 for this site?

    Go when: The reports you listed are either rebuilt or accepted as gone.

    Stop when: A decision still depends on Visitor Log for an imported month.

07The point of change

Cut over with a way back.

Go live

Cutover

Start Matomo tracking on the imported site without a double-counted day.

Recommended window: A morning when you can watch real-time and still edit the tag.

  1. Confirm the import's site id.
  2. Set the end date to the day before tracking.
  3. Publish that site's tracking code.
  4. Leave the GA4 tag until the URL sample looks acceptable.
  5. Remove the Google authorization only after the import status is finished.

Proof to capture: One Matomo site contains imported days up to the end date and native days after it.

Return to safety

Rollback

Keep GA4 as the system of record.

Deadline: Before anyone deletes the GA4 property.

  1. Leave or restore the GA4 tag.
  2. Remove the Matomo tag if the overlap bothers you.
  3. Keep the imported Matomo site. You cannot merge it later, and you also do not have to delete it.
  4. Note which URLs disagreed.
  5. Try again only with a new end date that does not overlap.

Proof to capture: GA4 is still collecting, and you know which Matomo site id was the attempt.

Rollback immediately when
  • The import created a second unwanted site and tracking used the wrong id
  • The end date overlaps the tag
  • URL samples are far from GA4 while the month total looks fine
  • The quota pause was mistaken for a finished import
  • A required report is one Matomo says it cannot import
08Verification report

Prove the migration worked.

Every blocking check must pass. Capture the evidence before cleanup begins.

0%
Interactive report preview0 / 8 checks passed
PassIDCheckMethodExpected resultEvidence
V-01BlockingNew site idRead the import status table.The id is the one whose tracking code you will paste.Site id note.
V-02BlockingEnd dateCompare the import end date with the first day of the tag.The tag starts the next day. Matomo's example is the 11th and the 12th.Date note.
V-03BlockingJob still scheduledRead import status after a day that hit the site limit.It resumes rather than sitting failed.Status table.
V-04BlockingNot the visitor logOpen Visitor Log on an imported day.You do not treat it as complete. Matomo says raw visits are not imported.Report note.
V-05Goals rebuiltOpen a GA4 goal you still use.A Matomo goal exists, because the import omits name, revenue, and rate.Goal list.
V-06BlockingURL sampleCompare at least three busy and three quiet URLs with GA4.Gaps are understood before the GA4 tag comes off.URL sheet.
V-07BlockingReal-timeLoad the site and find the visit on the new site id.The hit is on that id, not on an older test site.Real-time check.
V-08BlockingGA4 still openOpen the property.You can keep it as the record until the sample passes.GA4 screenshot.
09Post-migration cleanup

Remove the scaffolding safely.

Safe after: Native Matomo data covers the days you will use for decisions, and the import end date is in the past.

  1. Remove the Google authorization.
  2. Rebuild goals and the reports that imported blank.
  3. Keep the GA4 property until those reports are accepted.
  4. Write down the site id so nobody imports a second copy.
  5. Do not try to merge the test site.
10Experiences from the field

When the plan met reality.

First-hand accounts are preferred. Vendor case studies are labeled, and every note below is an editorial paraphrase—follow the link for the full context.

First-person accountCJ406 · Matomo forums

GA4 import for a high-traffic site leaves gaps after a successful run2026

On 17 February 2026, forum user CJ406 reported a GA4-only property of about 3 million pageviews a year imported into a self-hosted Matomo with MariaDB. The Google Analytics Importer finished in about 4 hours. Monthly and yearly totals looked close, and some busy URLs matched exactly, including 24,064 pageviews on both sides. Other URLs over 90 days were far lower, including 465 versus 35, 167 versus 51, and 253 versus 43. They said the GA4 API was not thresholding and that the missing URLs were absent from Matomo's log tables. The post asks for a cause and does not report a fix.

What they recommend
  • Compare individual URLs with GA4 after the importer reports success. A close month total did not mean every page matched.
  • Check whether the missing URLs are absent from the log tables before you treat the gap as a report-only problem.
Worth noticing
  • A completed GA4 import can match headline totals and still undercount some pages.
  • This report does not name a repair. It is a reason to sample pages before the GA4 tag comes off.
Sources and evidence

Verify against the primary material.

Platform behavior changes. Check these sources and the review dates above before executing a production migration.

  1. Matomo: import Google Analytics dataAccessed 2026-11-02
  2. Matomo: run the Google Analytics importAccessed 2026-11-02
  3. Matomo: import limitationsAccessed 2026-11-02
  4. Matomo: import with or without an end dateAccessed 2026-11-02
  5. Matomo forum: GA4 import gaps on a high-traffic siteAccessed 2026-11-02