Should you re-implement once for CJA or once for a self-hosted platform?
If your Adobe Analytics contract, retention deadline or data residency concern is forcing a re-implementation, the choice comes down to two destinations: Adobe's Customer Journey Analytics (CJA), which keeps you inside Adobe's stack, or a self-hosted platform such as Matomo or PostHog, which keeps data on infrastructure you control. The deciding questions are where personal data must physically live and which history must survive the move. Those answers should be settled before anyone touches a tag, because they determine whether the destination is a hosted Adobe service or a platform you run yourself.
Adobe advises Web SDK implementers not to lock their data model into the Adobe Analytics schema, so a re-implementation should start from the events and identifiers your business needs rather than from existing props and eVars. Both paths require you to re-implement collection, whether you switch to the Adobe Web SDK data layer that CJA expects or deploy a Matomo or PostHog tracker. Neither path lets you keep the old tagging as is. Ask Adobe which datasets, identity settings and schema fields it expects, and ask a self-hosted vendor or integrator which event names and user identifiers they will map, then compare both mappings on paper before building either one.
Before you pick a destination, export what you will need from the current implementation. Confirm which data feeds you are entitled to under your contract, how far back your raw history goes, and when retention ends, since a historical export and a re-implementation can run in parallel only if you start early. Map each report your analysts rely on to a concrete question, such as whether a funnel depends on a specific eVar. Where a self-hosted option cannot reproduce a feature, record that gap in writing so the decision reflects it. Your legal and privacy team should also confirm whether Adobe's processing locations and any cross-border transfers meet your residency rules, since the answer shapes which destination is acceptable.
What the constraint requires from an analytics platform
Whatever platform you choose, the EU consent rules and transfer rules decide what it may collect and where it may send data. These cards set out the requirements that shape the move or self-host choice, and what to check before you re-implement.
Purpose limited to audience measurement
CNIL sheet 16 exempts an analytics tracker from consent only when its purpose is limited to audience measurement and A/B testing. Any use for advertising, retargeting or cross-site profiling takes the tracker outside the exemption. For an Adobe Analytics to Customer Journey Analytics move, list every report, segment and downstream use the new setup will support, and remove any that go beyond measurement.
Single publisher scope
The exemption assumes the tracker measures one publisher's site or app and does not pool data across publishers. Shared vendor tracking that serves several sites, or a tag that sends data to a vendor-wide profile, falls outside this condition. Confirm which domains and properties your implementation covers and whether the vendor or a shared container combines data across them.
No cross-checking with other processing
Analytics data must not be matched against CRM records, advertising audiences or other processing to build profiles. Customer Journey Analytics often sits beside Experience Cloud and customer data platforms, so identity stitching across those sources can break the condition. Map every join or identity key in the design and confirm that analytics data stays separate from marketing and customer records.
Truncated IP addresses
The exemption requires the last byte of the IP address to be truncated before storage. Adobe and most collection endpoints receive the full address by default, so the truncation has to be configured in the collection path, whether that is a server-side collector, a proxy or the platform's own setting. Test a sample request in your environment and check the stored value, not only the configuration screen.
Tracker lifetime capped at 13 months
CNIL's conditions limit the tracker lifetime to at most 13 months, so cookies or identifiers must expire within that window. Adobe Analytics retention and rolling identifiers in new tools may be configured differently, and history you import can carry older identifiers. Set the cookie lifetime and the platform's retention period explicitly, and document both in your records of processing.
Most large offerings fall outside the exemption
CNIL's analytics guidance says most large audience measurement offerings do not qualify for the consent exemption, however they are configured. Teams that keep a commercial suite therefore usually need consent for its tracker. CNIL points to open-source software such as Matomo, which you configure yourself, as a route to the exemption. Ask any vendor for its written position on the exemption before you commit to a configuration.
EU-US transfers under the Data Privacy Framework
The European Commission adopted its adequacy decision for the EU-US Data Privacy Framework on July 10, 2023 (decision 2023/1795). It lets personal data flow to US companies that participate in the framework. A self-hosted platform in your own EU infrastructure avoids a US transfer by default, while a US-hosted vendor needs a participation check or other transfer safeguards. Confirm where the vendor, its sub-processors and support access sit.
How CJA, Matomo and PostHog meet the constraint
Customer Journey Analytics stays inside Adobe's hosted platform. Data location, processing and retention are governed by Adobe's contract, so the constraint is met only as far as those terms allow.
- Hosting: Your team does not operate the storage or query layer, so control over where data sits depends on the terms Adobe offers.
- Retention: Confirm in the contract how long event-level data is kept and whether longer retention is priced separately.
- Consent and exemption: CNIL guidance says most large audience measurement offerings fall outside the consent exemption regardless of configuration. Ask counsel how that applies to your setup.
- Re-implementation: Web SDK work is needed for this path too, so design the data schema once so it can later serve another destination.
- Exit path: Confirm in writing which export formats and history you can take out if you leave.
Check the data processing terms, retention clause and data location in the signed contract before comparing the other options further.
Matomo is licensed under GPLv3, and its On-Premise Community edition is free to run on your own servers. The consent question is narrower: CNIL's exemption conditions limit purposes to audience measurement and A/B testing, and Matomo's own FAQ notes that User ID, heatmaps or session recordings remove the exemption.
- License: The code is GPLv3. Heatmap and Session Recording is a paid premium plugin under the InnoCraft EULA, sold per number of users with a 30-day free trial.
- Sizing: A single server with at least 4 CPUs, 8 GB of RAM and 250 GB of SSD is listed for up to 1 million pageviews a month. Separate app and database servers with 8 CPUs and 16 GB of RAM each are recommended for up to 10 million.
- Exemption limits: Enabling heatmaps or session recordings moves the setup out of the exemption, so consent handling must be added for those features.
- Configuration: Apply the CNIL conditions, including IP truncation, a tracker lifetime of at most 13 months and a single publisher scope, and verify each setting in your environment.
- Other countries: Matomo's FAQ says Italy, the Netherlands and Spain suggest following the CNIL configuration. Confirm local rules with counsel for each market.
Confirm the exemption configuration with your data protection officer before enabling any premium plugin, and confirm the current server requirements for the release you plan to install.
PostHog's core is MIT licensed, but its ee directory needs a paid license for premium features on self-hosted instances. Self-hosted deployments are officially unsupported, and the supplied facts do not establish whether PostHog's analytics fit the CNIL consent exemption, so that fit needs separate review.
- License split: The core is MIT, and the ee/ directory is covered by its own license. Teams that need fully free software can review the posthog-foss repository, which is purged of proprietary code and features.
- Support: PostHog does not provide customer support for self-hosted product, infrastructure or other questions, so operations, upgrades and incidents must be covered by your own team or a partner.
- Deployment: The hobby Docker Compose deployment is MIT licensed. New Kubernetes deployments of the paid self-hosted product are no longer supported.
- Scale: PostHog's README says open-source deployments should scale to about 100k events a month and recommends its cloud service above that level.
- Exemption fit: Session replay and other features may change the consent position, so confirm with the regulator or counsel before relying on the exemption.
Confirm in writing which license covers each feature you plan to use, the support model and the consent position for your configuration before committing.
Option comparison: fit, gaps and trade-offs
This table compares Customer Journey Analytics with self-hosted Matomo and PostHog, plus the hosted versions of the two open-source options, on residency and consent fit, known gaps and who supports each. Test each row against your own consent setup, history needs and data location requirements. The main takeaway is that self-hosting keeps data in your infrastructure but moves consent configuration, history import and support work to your team or a partner.
| Option | Residency and consent fit | What it does not cover | Who supports it |
|---|---|---|---|
| Customer Journey Analytics (Adobe) | Data location and consent options depend on your Adobe contract and region; confirm them with Adobe. | Keeps you on Adobe's data model and licensing, so exit still requires exporting feeds first. | Adobe, under your contract; confirm response terms and services in writing. |
| Self-hosted Matomo | Data stays on servers you choose; set IP truncation and a cookie lifetime of 13 months or less for the CNIL exemption. | Visitor Log and segmentation do not work on imported aggregated history; session recordings remove the consent exemption. | Community forum for On-Premise; production support needs a paid arrangement or implementation partner. |
| Self-hosted PostHog | Data stays in your infrastructure; use posthog-foss for fully free code or a license for ee features. | Mixpanel and Amplitude imports cover one year per job; ee premium features need a paid license. | PostHog does not support self-hosted instances, so internal staff or a partner run operations. |
| Matomo Cloud | Cloud data is stored in Frankfurt, Germany; confirm contract and sub-processor terms. | Less control over servers and plugin choices than self-hosting; plans scale with hits per month. | Supplied by Matomo under its cloud plan; confirm service levels in writing. |
| PostHog Cloud | Regions are US (Virginia) and EU (Frankfurt); choose the region before ingesting any data. | SSO, audit logs and custom roles are sold as platform packages; first 1 million events are free monthly. | Supplied by PostHog under its plans; confirm support terms for your region. |
What to export from data feeds before retention runs out
This sequence leaves you with a complete, documented copy of your Adobe Analytics data before the retention deadline in your contract, so the team can rebuild history in CJA, Matomo or PostHog on its own schedule. It also keeps the raw events that aggregated imports cannot carry over.
Confirm the retention deadline in writing
Ask your Adobe account team and procurement to confirm, in writing, the date after which Adobe Analytics data is deleted, and whether that date differs by report suite or contract. Check whether the contract includes a retention extension and what it costs. Record the owner, the date and the source document in the migration plan. This step is done when a named person has signed the date and every later step is scheduled against it.
Enable raw data feeds to storage you control
Ask Adobe which data feed cadence is available to your organization, such as hourly or daily delivery, and request delivery to a cloud storage location that your team owns and administers. Confirm the file format, folder structure and any naming convention with Adobe in writing. Your cloud or platform team should verify that the first files arrive in your bucket and that they match the expected report suites. This step is done when several consecutive files have landed and been checked.
Request the historical raw export
Ask Adobe whether a historical raw export is available for the report suites you need, and confirm the scope, delivery method and any cost before the retention deadline. Prioritize the report suites that hold your highest-value history, such as checkout, lead and core content traffic. Your team should confirm the date range that Adobe will deliver and whether any part of it is excluded. This step is done when Adobe has confirmed the range in writing and the files are in your storage.
Export Data Warehouse reports on a schedule
Set up scheduled Data Warehouse report exports for the summary reports your business reviews, such as traffic sources, conversion and campaign performance. Confirm any delivery limits in the Adobe documentation or with your account team, because large reports can be split or truncated. Store these exports alongside the raw feeds so that summary numbers can be reconciled later. This step is done when each scheduled report has delivered at least one complete export to your storage.
Document props, eVars and events
Write a versioned data dictionary that maps every prop, eVar, event and list variable to its business meaning, its implementation owner and the date it was introduced or changed. Include processing rules, classifications, virtual report suites, time zone and currency settings, and any tag manager rules that set these variables. Without this record, raw hit columns are difficult to interpret after the Adobe contract ends. This step is done when an analyst who did not build the implementation can explain each variable from the document alone.
Archive raw files with access controls
Store the raw files, Data Warehouse exports and data dictionary in a location with encryption, restricted access and logged reads, and apply a retention policy that your legal and privacy teams approve. Generate checksums for each file so that later copies can be verified. Restore a sample of files to a separate environment to confirm that they can be read and parsed. This step is done when the restore test passes and the access list is approved by the data owner.
Decide which raw features you need later
Decide which features need raw event data, such as the Visitor Log, segmentation on individual visits or custom analysis of path sequences. Matomo's Google Analytics importer brings over aggregated report data only, so these features do not work on imported history, as the Matomo FAQ on import limitations explains for that importer. If you need these features on past data, keep the raw files and plan a replay into the new platform. This step is done when the decision is recorded and linked to the archive location.
Reconcile sample totals before the deadline
Choose a sample period and compare visit, pageview and conversion totals computed from the raw files with the figures in Adobe Analytics for the same report suite and time zone. Investigate any differences, such as bot filtering, processing rules or late-arriving data, and document the cause. Repeat the check for a second period that includes a campaign or seasonal peak. This step is done when the variances are explained in writing and the data owner signs off before the retention deadline.
How to deploy self-hosted Matomo or PostHog under the constraint
This sequence takes the team from a confirmed platform choice to a running, configured instance in a region the organization can justify, with consent-relevant settings applied before any production traffic is collected. Each step closes with a check the team can verify.
Choose the platform and release against the constraint
The platform owner, usually the analytics lead with the privacy office, decides between Matomo and PostHog based on the use case: Matomo for web audience measurement, PostHog for product analytics, session replay and flags. For Matomo, compare Matomo 5 with the Matomo 6.0.0 beta, which the changelog lists as in beta, and do not run a beta in production without a documented reason. Confirm current versions with the vendor before installing. The output is a short decision record naming the platform, release line and the reason for it.
Confirm PHP and database versions for the release
The infrastructure team checks the runtime against the requirements FAQ. Matomo 6.0.0 needs PHP 8.1 or newer and MySQL 8.0 or newer or MariaDB 10.6 or newer. Matomo 4.16 and 5 run on PHP 8 with MySQL 5.5 or later or MariaDB, behind a web server such as Apache, Nginx, IIS or LiteSpeed. Confirm the exact minimums with the vendor, since they may change between releases. The output is a signed-off stack list, with each version pinned, that the platform team can reproduce in staging.
Size application and database servers by pageviews
Estimate monthly pageviews from current analytics and the expected growth, then size the servers. Matomo's requirements FAQ sizes a single server with at least 4 CPUs, 8 GB of RAM and 250 GB of SSD for up to 1 million pageviews a month, and recommends separate app and database servers with 8 CPUs and 16 GB of RAM each for up to 10 million pageviews a month. PostHog's self-host docs recommend a server equivalent to 4 vCPU, 16 GB of RAM and more than 30 GB of storage for its hobby deployment. The output is an infrastructure request that cites these figures and the traffic estimate behind them.
Place the instance in the required region
The data protection lead confirms where personal data must sit and where the instance will run. Self-hosting means the organization chooses the cloud account, data center or on-premises location, so residency is set here rather than inherited from a vendor. For PostHog Cloud comparisons, the managed options are US (Virginia) and EU (Frankfurt), but this sequence assumes a self-hosted instance in a location the team controls. Record the region, the backup location and the administrators' access locations. The output is a data map entry that the privacy office can review.
Install the chosen platform in a staging environment
For Matomo, the platform engineer installs the On-Premise Community edition on the pinned stack and completes the web installer. For PostHog, the team chooses between the free Docker Compose hobby deployment under the MIT license, installed with the deploy-hobby script, and a paid license if the ee directory features are required. PostHog states that its self-hosted deployments are officially unsupported and that it offers no customer support for them, so the team must own that operational risk. The output is a working staging instance with a test site or project that accepts events.
Configure IP truncation and tracker lifetime
Before production collection, the analytics engineer applies the privacy settings the consent position depends on. CNIL's sheet 16 lists truncating the last byte of the IP address and a tracker lifetime of at most 13 months as conditions for the consent exemption, along with limiting purposes to audience measurement and A/B testing. Matomo's ePrivacy FAQ notes that adding User ID, heatmaps or session recordings removes that exemption, so those features stay off in this configuration. Confirm the current exemption criteria with the relevant authority. The output is a configuration record listing each setting and its value, reviewed by counsel.
Validate tracking and retention before go-live
The QA lead sends test traffic through the staging site and confirms that events arrive, that IP addresses are truncated in stored data, and that cookies expire within the configured lifetime. The team also records a backup and restore test, because the vendor is not the party that will recover the data. Where historical data is being imported, confirm which features will not work on it, for example Matomo's Visitor Log and segmentation on imported reports. The output is a signed test report that the platform owner approves before the production tag is switched.
Questions buyers ask before choosing between CJA and self-hosting
How much does re-implementing analytics for CJA or a self-hosted platform cost?
No supplied figure sets this cost, and the answer depends on what you already run. The main cost drivers are the number of tags and data elements, the custom events you need to rebuild, the server capacity you size for your pageview volume, and how much historical data you move. For self-hosted Matomo, the software itself is free under GPLv3, so the cost sits in servers, storage, implementation, data migration, upgrades and staff time. For CJA, the cost sits in the Adobe licensing you already hold plus the implementation work. Ask any quote to split one-time work (schema mapping, tag rebuild, consent setup, history export) from recurring work (hosting, upgrades, monitoring, support) and to state which Adobe contract terms it assumes.
How long does a re-implementation take, and what changes the timeline?
The timeline depends mostly on how many properties, report suites, props, eVars and events you run, and on how many people are available to make decisions. A team with a small, well-documented implementation usually moves faster than one with years of custom variables and several sites sharing a tag library. Two items set hard deadlines outside the project plan: the retention window on your Adobe data and any data feed exports you still need. Ask for a timeline with named milestones and for the dependencies on your analysts, developers and privacy lead, since those people are often the bottleneck.
What do our internal analysts and privacy team have to provide?
Analysts need to own the schema mapping: deciding which props, eVars and events become CJA dimensions, metrics and events, or which become Matomo custom dimensions and goals, or PostHog events and properties. They also need to validate that reports match what the business expects before the old reports are retired. Your privacy lead owns the consent decisions, including whether a tracker can be configured to meet a national exemption, such as the CNIL conditions for audience measurement, or whether the data needs a consent banner. Engineers handle tag manager changes and server-side collection. Agree these named roles in writing before work starts, because a schema decision made late usually means rework.
Can our own team run self-hosted PostHog without vendor support?
Your team can deploy it, but you should plan to run it without vendor support. PostHog's self-host documentation states that self-hosted deployments are officially unsupported and that PostHog does not offer customer support for product, infrastructure or other questions on self-hosted instances. Its README also says open-source deployments should scale to approximately 100k events per month and recommends PostHog Cloud above that. The free Docker Compose hobby deployment is MIT licensed, while the ee directory needs a PostHog license for premium features. Check which edition you would run, whether you need features from ee, and who will carry upgrades, backups and incident response.
What does a self-hosted analytics platform need for hosting and sizing?
Sizing follows your traffic and the platform you choose. Matomo's requirements FAQ sizes a single server with at least 4 CPUs, 8 GB of RAM and 250 GB of SSD for up to 1 million pageviews a month, and recommends separate app and database servers with 8 CPUs and 16 GB of RAM each for up to 10 million pageviews a month. PostHog's self-host documentation recommends a server equivalent to 4 vCPU, 16 GB of RAM and more than 30 GB of storage for its hobby deployment. Ask your team to measure current pageview and event volume, then confirm the sizing against the vendor's current requirements page, since versions change the stack, including Matomo 6.0.0's PHP 8.1 and MySQL 8.0 or MariaDB 10.6 needs.
What historical data can we move, and what gets lost?
Historical data moves in different forms depending on the destination. Aggregated report data can be imported, but raw events cannot always be rebuilt. Matomo's Google Analytics Importer, for example, brings over aggregated reports only, so the Visitor Log, Ecommerce Log, Custom Reports and Segmentation do not work on imported history, and some reports such as Funnels are not imported. PostHog's managed migrations import raw historical events from Mixpanel or Amplitude, with at most one year per direct import job, and events are not deduplicated. Export raw data feeds to cloud storage before your Adobe retention deadline, because data you do not export is lost when the window closes.
What should a DeployOpen quote include for this migration?
Ask for a fixed scope in writing before work starts, covering the sites and report suites in scope, the target platform and version, the schema mapping for props, eVars and events, the tag manager changes, the consent configuration your privacy lead signs off on, and the historical export and import method with its limits. The quote should list hosting architecture, backup and upgrade responsibilities, testing and validation steps, documentation, and what happens after go-live. Ask which items are one-time and which are retainers for ongoing support, upgrades and continuous testing. DeployOpen does not publish a price list, so the quote follows from that written scope. DeployOpen prepares systems and evidence for compliance assessments, but it does not issue audit reports or certifications.
Do the EU privacy rules affect which analytics platform we can choose?
They can, and the choice affects consent requirements. France's CNIL lists conditions under which an analytics tracker can be exempt from consent, including limiting purposes to audience measurement and A/B testing, a single publisher scope, no cross-checking with other processing, truncating the last byte of the IP address, and a tracker lifetime of at most 13 months. CNIL's guidance also says most large audience measurement offerings do not fall within the exemption regardless of configuration, and it suggests open-source software such as Matomo that you can configure yourself. Adding features such as User ID, heatmaps or session recordings removes the exemption. Confirm the exact conditions for each country you serve with your privacy lead and counsel.
Evidence auditors and regulators ask for
Whichever destination you choose, an assessor will ask the same questions about consent, retention, transfers and access. These cards describe the records to prepare so the answers come from documents rather than memory. They are inputs prepared for an assessor, not certifications or audit reports.
Consent configuration record
Document how the analytics tracker is configured against the conditions in CNIL sheet 16: purpose limited to audience measurement, a single publisher scope, no cross-checking with other processing, and the last byte of the IP address truncated. Keep a dated export of the settings and the tag version that was live. If you add User ID, heatmaps or session recordings, the exemption no longer applies, so this record must show those features were off. Confirm the exact conditions with your national authority, since several EU regulators publish their own variants.
Tracker lifetime settings
Record the cookie or identifier lifetime configured for the analytics tracker and show it matches the maximum that CNIL sheet 16 sets for exempt trackers. Capture the setting from the tag, the server configuration and the browser test results, since a value changed in one place can differ from the value in effect. Re-check the record after every SDK or tag manager change.
Data transfer documentation
If any analytics or session tooling is hosted outside the EU, or a vendor has US-based support access, keep the transfer basis on file. Record whether the recipient participates in the EU-US Data Privacy Framework, the date you checked, and the decision it relies on. For a self-hosted deployment inside your own EU cloud region, the file may show no transfer at all, which is itself a finding to document.
Raw export archive and manifest
Before retention ends, store each raw data feed or export in your own storage with a manifest listing file names, date ranges, row counts, checksums and the job that produced them. The manifest lets an assessor confirm that history was preserved completely and not edited. Record who approved the export and where the archive is held, so the archive can be traced after the vendor account closes.
Retention and deletion schedule
Write a schedule that states how long each dataset is kept in the new platform, which system holds it, and when it is deleted. Include the migrated history and the archive, not only live data. Tie each period to a documented purpose and to the tracker lifetime. Ask the vendor or platform team to confirm how deletion is performed and how it is evidenced, because some imports cannot be selectively deleted once loaded.
Access logs for the self-hosted instance
Keep logs of administrator logins, configuration changes, data exports and user role changes on the self-hosted instance, and send them to a central log store that the analytics administrators cannot edit. Review access on a set schedule and remove accounts that have left. These logs show who could reach identifiable visitor data and whether that access was used as documented.
How DeployOpen works on this
DeployOpen starts from the written scope for your Adobe Analytics to Customer Journey Analytics decision, then plans and implements the self-hosted option your team chooses, with the data export and evidence work done before retention runs out. Engagements are fixed-scope, with scope, deliverables and timelines agreed in writing before work starts.
How we scope
- Inventory which Adobe Analytics report suites, props, eVars and events your teams rely on today.
- Confirm which data feeds and Data Warehouse exports your organization has access to before retention deadlines apply.
- Record in writing whether the scope covers a CJA re-implementation, a self-hosted Matomo or PostHog build, or both.
How we build
- Design the event schema once so the same tracking plan can feed either CJA or the chosen self-hosted platform.
- Implement server sizing, database layout and consent settings in your own cloud account, data center or air-gapped network.
- Test tracking accuracy against a parallel run so report totals can be compared before any tag switch.
How we hand over
- Deliver architecture, configuration and runbook documentation covering each platform component you run.
- Document the export and retention steps, including what was taken from feeds and where it is stored.
- Provide the compliance readiness evidence your auditors or legal team need, without issuing audit reports or attestations.
How we support
- Offer ongoing support, upgrades and continuous testing as a retainer after handover.
- Plan upgrades of the self-hosted platform and its database as part of the retainer scope.
- Ask your independent auditor or certification body to confirm any compliance outcome, since DeployOpen prepares controls and evidence only.

