Plausible → PostHog
Point the site at PostHog for new pageviews, and treat a Plausible history import as experimental. Plausible's portability export is aggregated, so it cannot become exact PostHog events.
Should you make this move?
Both platforms have a case. Compare what you gain with what you give up before scheduling the cutover.
Plausible
- A simple privacy-focused dashboard delivers understandable web analytics quickly
- Established reporting patterns make recurring measurement easier
- Product analytics, attribution depth, and complex segmentation are intentionally limited
- Tracking quality still depends on disciplined implementation and governance
PostHog
- Open product analytics, session replay, feature flags, and experiments consolidate product tooling
- Product-focused reporting helps teams understand behavior beyond page views
- Event volume, deployment choice, and broad feature scope add operational complexity
- Event schemas and historical cohorts are expensive to redesign or move
PostHog: Open product analytics, session replay, feature flags, and experiments consolidate product tooling. This removes a major source-side concern: Product analytics, attribution depth, and complex segmentation are intentionally limited.
What you lose: A simple privacy-focused dashboard delivers understandable web analytics quickly. What you inherit: Event volume, deployment choice, and broad feature scope add operational complexity.
Jump to a section
Know the shape of the move.
This timeline assumes
- You have a Plausible site and a PostHog project in the US or EU cloud you mean to keep.
- New traffic will be captured by the PostHog snippet or SDK. History is optional.
- You can export Plausible before a trial or subscription ends. After that, only the site-settings export remains, and dashboards can be deleted.
- The site already documents Plausible → Google Analytics 4 and Plausible → Matomo.
What survives the move.
“Partial” and “manual” are not footnotes. They are work that must be scheduled and verified.
| Item | Outcome | Impact | What happens | Mitigation |
|---|---|---|---|---|
| Historical events | partial | critical | PostHog's Plausible guide is marked experimental. It says the import is less accurate than data PostHog captured itself, and contributions are welcome. Plausible exports aggregates, not the events behind them. The guide's script invents distinct IDs and assigns pageviews at random so the totals can look similar. | Keep the Plausible CSV as the historical record. Use PostHog for traffic after the snippet is live. |
| What the script skips | lost | high | PostHog says the work-in-progress script does not include person or event properties such as UTMs, session duration, bounce rate, custom events, or entry and exit pages. | Do not promise funnel history from the import. Recreate goals on new traffic. |
| Words for the same idea | partial | medium | PostHog's guide maps Plausible visitors to persons and Plausible visits to sessions. | Label imported charts so nobody compares them to native PostHog persons as if they were the same capture. |
| Plausible site-settings export | partial | high | Site settings export all native stats to date as CSV, one row per day per item. It excludes data you previously imported into Plausible. Plausible emails you when it is ready. | Download it before the subscription lapses. Dashboard export and the Stats API go away without an active trial or subscription. |
| Dashboard CSV limits | partial | medium | A dashboard export follows the date range and filters you set, and it can include imported data. Plausible caps each file at the top 300 entries, and pages and exit pages at the top 100, so the download stays quick. | Use the site-settings export when you need every page, not the chart download. |
| Raw events | manual | high | Event-level exports are a Plausible Enterprise feature, delivered daily to S3-compatible storage. The ordinary CSV is aggregated. | If you need raw history, start that export before you cancel. Do not expect the free CSV to contain it. |
| PostHog project setup | manual | critical | The migration guide tells you to create a US or EU project first. Historic imports are free, but you need a paid product analytics plan to unlock the features the import uses. Set historical_migration when capturing the backfill. EU projects use eu.i.posthog.com, not the US host. | Pick the region before you capture anything. A later move is a second migration. |
| Snippet and goals | manual | critical | Plausible goals and custom events do not become PostHog actions. You install PostHog and define them again. | List every Plausible goal. Recreate the ones you still report, and check one conversion. |
| Cookieless setup | manual | medium | A team that left Plausible for PostHog wanted to stay off cookie banners. PostHog can run with a different persistence setting, but that is configuration, not something the import does. | Choose persistence before the first production pageview. |
| Funnels and replay | manual | medium | They start when PostHog is capturing. The Plausible CSV cannot fill them in. Significa switched because Plausible felt too simple for funnels, and they adopted replay after the move. | Treat the first weeks as a new baseline. |
| Old dashboards | lost | low | Saved Plausible views stay in Plausible. PostHog has its own insights. | Screenshot the views you still cite in reports. |
Where each thing goes.
| Source | Destination | Method | Notes |
|---|---|---|---|
| Plausible visitor | PostHog person | transform | The official script synthesizes IDs. They are not the original visitors. |
| Plausible visit | PostHog session | transform | Session timing is not in the work-in-progress script. |
| Pageview totals | Captured pageviews | transform | Totals can be approximated. Paths per person are not recovered. |
| Site-settings CSV | Archive, or the experimental importer | manual | Native stats only. Imported GA data is excluded. |
| Dashboard export | A filtered spreadsheet | manual | Top 300, or top 100 for pages. Fine for a report, not for a full backfill. |
| Custom event | PostHog event | manual | Not in the current conversion script. Capture it going forward. |
| Goal | PostHog action or event | manual | Recreate it. Check one live conversion. |
| Plausible script | PostHog snippet | manual | Remove the old script when PostHog is the only collector. |
| Enterprise raw export | Your bucket | manual | This is the path that is actually event-level. It is not the default CSV. |
Make the move recoverable.
Create the source-of-truth backup
Keep Plausible's full native export even if you never import it.
- From site settings, run Export to CSV and download it when the email arrives.
- Export any dashboard view you still paste into reports, and note the top-N cap.
- Screenshot goals and the sites that use the snippet.
- If you have Enterprise raw export, confirm a file landed in the bucket.
- Leave the Plausible snippet in place until PostHog shows a day of traffic.
Proof to capture: The site-settings ZIP is downloaded and the email's expiry date is on your calendar.
New capture
Record pageviews in PostHog from the day you switch.
- Create the project in the region you want.
- Install the snippet on a preview host.
- Set persistence to match the cookie decision you already made.
- Compare a day's pageviews with Plausible before you remove the old script.
Proof to capture: Save the input, output, command or tool settings, warnings, and final item counts.
Optional backfill
Approximate old totals, with the limits PostHog documents.
- Turn on a paid product analytics plan so the import features unlock. PostHog says the historic import itself is free.
- Export from Plausible site settings.
- Run the script with historical_migration set, and the EU host if that is your project.
- Label the result as synthetic. Do not use it for per-user funnels.
Proof to capture: Save the input, output, command or tool settings, warnings, and final item counts.
The things most likely to hurt.
These are operating limits. Treat every “Stop if” condition as a blocked migration, not a suggestion.
Imported history is treated as real events
A chart of imported pageviews looks like PostHog capture.
- Consequence
- Funnels and retention from that range are fiction. The script assigned pageviews at random.
- Mitigation
- Keep history in the CSV. Start funnels on the first native day.
Stop if: Someone is about to report a funnel that includes the imported range.
Both snippets count the same view
Plausible and PostHog are on the page together longer than the overlap you planned.
- Consequence
- You double-count if you add the two tools together.
- Mitigation
- Overlap on purpose, then remove Plausible. Do not sum them.
Stop if: A report adds both totals for the same day.
The export link expires
Plausible emails a download link with a limited life, or the subscription ends first.
- Consequence
- The native history is gone with the dashboard.
- Mitigation
- Download the ZIP as soon as the email arrives.
Stop if: You cancelled Plausible and the ZIP is not on disk.
Do the work in this order.
- Days 1 to 2 · inventory
List sites and goals
2 to 4 hours active1 to 2 days elapsedOwner picks the PostHog region waiting- List sites, goals, and where the script is installed.
- Choose US or EU.
Depends on: Plausible admin and a PostHog project
Stop / go checkpointExport?
Go when: Every site has an owner and a region.
Stop when: You still need a funnel of last year's individual visitors.
- Days 2 to 4 · backup
Download the CSV
1 to 3 hours active1 to 2 days elapsedPlausible email waiting- Run the site-settings export.
- Save dashboard screenshots.
Depends on: Active trial or subscription if you still want dashboard export
Stop / go checkpointInstall PostHog?
Go when: The ZIP is downloaded.
Stop when: The email never came and the subscription is ending.
- Days 4 to 7 · pilot
Preview snippet
3 to 6 hours active2 to 3 days elapsedA day of traffic waiting- Install PostHog on preview.
- Recreate one goal.
- Optionally run the experimental import on a scratch project.
Depends on: ZIP archived
Stop / go checkpointProduction snippet?
Go when: Preview pageviews arrive and the goal fires once.
Stop when: The wrong cloud region is capturing.
- Days 7 to 8 · cutover
Swap the script
1 to 2 hours active1 day elapsedDeploy waiting- Ship the PostHog snippet.
- Remove Plausible after you see production traffic.
Depends on: Preview passed
Stop / go checkpointPostHog is the collector?
Go when: Production pageviews show up and Plausible is no longer on the page.
Stop when: Both scripts remain and a report is summing them.
- Days 8 to 15 · observe
New baseline
1 to 3 hours active7 days elapsedA week of traffic waiting- Compare order of magnitude with the last Plausible week.
- Keep the CSV.
Depends on: Snippet live
Stop / go checkpointCancel Plausible?
Go when: You have the ZIP and a week of native PostHog data.
Stop when: A goal you still need was never recreated.
Cut over with a way back.
Cutover
PostHog records new pageviews. Plausible history sits in the CSV you already downloaded.
- Confirm the ZIP is on disk.
- Deploy the PostHog snippet to production.
- Watch one real pageview and one goal.
- Remove the Plausible script.
- Do not add the two tools' totals together for the overlap day.
Proof to capture: PostHog shows production traffic. The page source has one analytics snippet. The CSV is archived.
Rollback
Put the Plausible snippet back if PostHog capture is wrong.
- Restore the Plausible script.
- Remove the PostHog snippet if it is double counting.
- Keep the CSV either way.
- Fix region, persistence, or the goal definition on a preview host.
- Switch again only after preview traffic looks right.
Proof to capture: Plausible is counting again and you still have the export.
- A report uses synthetic IDs as real people
- The two snippets are being summed
- Capture is in the wrong region
- A required goal does not fire
- The CSV was never downloaded
Prove the migration worked.
Every blocking check must pass. Capture the evidence before cleanup begins.
| Pass | ID | Check | Method | Expected result | Evidence |
|---|---|---|---|---|---|
V-01Blocking | ZIP downloaded | Open the site-settings export. | Daily files are present and the link has not expired unused. | ZIP listing. | |
V-02Blocking | Project host | Read the snippet host. | US or EU matches the project you created. | Snippet source. | |
V-03Blocking | One pageview | Load a production URL and find it in PostHog. | One native event, not an imported row. | Live event. | |
V-04Blocking | One conversion | Trigger a recreated goal. | PostHog records it once. | Event log. | |
V-05Blocking | Label | If you ran the script, open the imported range. | The dashboard says the range is synthetic. Funnels do not include it. | Note on the insight. | |
V-06Blocking | Single collector | View source on the home page. | Plausible's script is gone after cutover. | Page source. | |
V-07Blocking | No summed day | Read the report that covers cutover day. | It cites one tool, or it shows them separately. | Report. | |
V-08 | Persistence | Compare the banner decision with the PostHog init. | The setting matches what you told users. | Init config. |
Remove the scaffolding safely.
Safe after: A week of native PostHog traffic and a CSV you can still open.
- Store the ZIP with the date Plausible would have deleted the dashboard.
- Remove leftover Plausible environment variables.
- Cancel Plausible only after that archive exists.
- Delete the scratch project if you tested the experimental import.
- Document which day native capture starts.
- Review goals next quarter against the new baseline.
Verify against the primary material.
Platform behavior changes. Check these sources and the review dates above before executing a production migration.
- PostHog: migrate from PlausibleAccessed 2026-11-03
- Plausible: export your website statsAccessed 2026-11-03