Carwow logo

    Carwow accelerate their migration to Google Cloud with AI and Rittman Analytics

    Becky Allsop

    Becky Allsop

    Director of Analytics & Data Science, Carwow

    “I had an update with all of the exec and the leadership team yesterday. They were all absolutely amazed at what's been achieved. They were astounded at what's been done in the timeframes, compared to all of their previous experiences in other businesses doing this type of thing.”
    Carwow car review featuring a blue SUV

    Vital Stats

    Website

    https://www.carwow.co.uk

    Industry

    Automotive Marketplace, Online Retail

    Company Size

    c. 500 employees

    Headquarters

    London, United Kingdom

    Rittman Analytics Services

    • Data warehouse migration
    • dbt consulting & support
    • Data platform implementation
    • Wire Framework (AI-assisted delivery)

    Technologies Used

    • Google BigQuery
    • Snowflake
    • dbt
    • Fivetran
    • Hightouch
    • Apache Airflow
    • Google Cloud
    • Wire Framework and Claude Code

    The Download

    Carwow is the UK's largest online car-changing marketplace, helping customers buy new and used cars, sell their existing car and lease vehicles. It operates across the UK, Germany and Spain, with dealers and manufacturers using the platform to reach potential buyers.

    Behind the marketplace sits a large data estate that supports Carwow's marketing, commercial and finance teams. Its Snowflake warehouse contained around 1,700 dbt models, fed by more than 150 Fivetran connectors. From there, 640 Hightouch syncs pushed data into advertising platforms, CRM systems, Google Sheets and dealer-facing reports. Around 300 columns contained personal data protected by masking policies.

    In 2026, Carwow decided to consolidate its analytics platform on Google Cloud. The plan was to move the warehouse to Google BigQuery, then build towards a new Looker semantic layer and AI-enabled analytics.

    The first priority was the migration itself: move every existing model to BigQuery with as little change as possible and as quickly as possible, prove that it produced the same results as before and get the new platform safely into production.

    The Challenge

    A warehouse migration at this scale brings a set of technical and operational challenges. Every model needs to be translated into the new SQL dialect, rebuilt and validated against the original, with any differences understood before the model can move into production.

    For Carwow, three factors shaped the approach.

    A tight delivery window. Work began at the end of June 2026, with model migration targeted for completion by mid-September. The migration had to move quickly while Carwow's data engineering team continued to support the existing production platform and ongoing business priorities.

    A live and evolving codebase. Development continued throughout the migration, with around 30 new models added each month alongside regular changes to existing models. The migration process had to account for models changing after translation and keep the BigQuery version aligned with the latest Snowflake code.

    Source data arriving in parallel. Historical and source data was being migrated into BigQuery as model translation progressed. In some cases a translated model could not yet be fully built or tested because a required upstream table had not arrived. The process needed to distinguish quickly between translation issues and temporary data dependencies so work could continue.

    The standard for completion was deliberately rigorous. Each migrated model had to match its Snowflake equivalent exactly, or have any difference documented and agreed with Carwow. For models whose output was sent beyond the warehouse, including advertising feeds and finance exports, exact equivalence was particularly important: these outputs feed directly into operational systems, so validating them before cutover was a key part of the migration.

    The Solution

    Rittman Analytics delivered the migration using Wire, its AI-assisted delivery method for data platform work, following a nine-step process built for migrations of this scale.

    Wire's nine-step lift-and-shift migration process: snapshot and audit, translation, validation and lint, development build, equivalence test, release assembly, review and merge, production build, post-merge verification

    1. Snapshot and audit. Wire began by building a complete picture of Carwow's Snowflake environment. It mirrored the dbt project and ran audits across the warehouse, ingestion pipelines, reverse ETL, orchestration and security. The audit identified over 1,700 dbt models to migrate, grouped by complexity, and mapped hundreds of protected data fields and their masking rules to the equivalent controls in BigQuery. A short pilot then took a representative group of models through the full process, from translation to validation, establishing a measured delivery pace for planning at full scale.

    Wire
    dispatches one agent per layer
    run concurrently
    each layer’s audit is independent of the others
    Audit agentsone per platform layerin parallel
    db-object-audit-generatedatabase objects
    every database and schema
    every table and view, with size and rows
    stored procedures and UDFs
    masking policies and tagged columns
    the full RBAC graph of roles and grants
    security-audit-generatethe same connection, different questionssecurity
    which roles hold which grants
    which columns carry PII tags
    Findings determine which IAM bindings and BigQuery policy tags target-setup creates.
    dbt auditdbt models
    assigns every model a complexity tier
    triviallowmediumhighblocked
    ingestion pipeline agentingestion pipelines
    details of every connection
    details of every pipeline
    reverse ETL agentreverse ETL
    details of every sync
    details of every destination
    …and one agent for every further layereach independent until results are assembled
    MCP  legacy DW server · account · role · warehouse
    Legacy DW platform
    the system being migrated from, typically thousands of objects
    Databases & schemas
    Tables & views
    size and row count
    Stored procedures & UDFs
    Masking policies
    and their tagged columns
    Roles & grants
    the full RBAC graph
    MCP
    Ingestion pipeline platform
    connectionspipelines
    MCP
    Reverse ETL platform
    syncsdestinations
    Migration inventory
    a single file, a tabular record of every item, one row per object, typically thousands
    pendingtranslateddeferredmigratedfailed
    objecttypesize · rowsstatecomplexity
    tablemigrated—
    UDFpending—
    dbt modeldeferredmedium
    pipelinetranslated—
    syncfailed—
    ⋮  one row per object
    dispatch
    back-and-forth over MCP
    assemble
    1
    2
    3

    2. Inventory and batching. Wire turned the estate into a structured register covering every model, connector and downstream sync, mapped the dependencies between them, and organised the work into ten self-contained migration waves. This structure let much of the migration run in parallel: models were translated, built and checked for equivalence as soon as their dependencies became available. Parallel AI agents handled the repeatable work of translation, validation, comparison and drift detection, while a senior Rittman Analytics consultant acted as release director, overseeing each wave and making the decisions that needed human judgement.

    With the estate audited, registered and batched, delivery shifted into a delegated, agentic mode: from this point Wire's AI agents carried out the repeatable stages below in parallel and around the clock, with the human team setting direction, reviewing output and making the release decisions.

    Tier 01
    Release director
    One human
    Client communications
    Rulings and waivers
    Approval gates
    Judgment catches
    Fleet-size and budget decisions
    Rulings, waivers and approval gates
    Judgment catches
    Tier 02
    Orchestrating session
    One Fable-class session
    Dispatches and monitors lanes
    Owns the register (single writer)
    Consolidation and backstop passes
    Assembles PR evidence
    Amends process docs the day a ruling lands
    Dispatch
    Monitoring and PR evidence
    Lane 01
    Translate wave models
    Lane 02
    Validate and lint
    Lane 03
    Build playground copies
    Lane 04
    Run equivalence battery
    Lane 05
    Verify post-merge
    Lane 06
    Drill count divergence
    Lane 07
    Rebuild sync audit
    Lane 08
    Check branch copies
    Tier 03
    Lane agents
    6–12 concurrent
    Stage-scoped work: translation, validation and evidence, one stage at a time.

    3. Translation. Wire's translation agents rewrote each model's SQL and configuration for BigQuery using a translation guide agreed with Carwow's engineers, covering the less obvious dialect differences: division by zero, rounding, JSON handling, type coercion and timestamps. Translation ran at scale, with hundreds of models handled simultaneously. By mid-August, more than a thousand model comparisons had been completed without identifying a translation defect.

    4. Validation and linting. Every translated model had to parse and compile in BigQuery before it could move on. Engagement-specific lint rules caught subtle behavioural changes that would not cause a build failure but could change the resulting data.

    5. Sandbox build. Translated models were built in a controlled BigQuery sandbox before release, with cost checks before larger builds ran. As the migration progressed, the team moved from small batches to building hundreds of models in a single run, with thousands of dbt tests passing alongside them.

    6. Equivalence testing. Each BigQuery table was compared with the Snowflake table it replaced: row counts, grain, schema and representative value totals, run against production-scale datasets including tables of tens or hundreds of millions of rows. Models were classified as an exact match, a match with understood timing differences, blocked by data availability, or needing further translation work.

    7. Release assembly and pull requests. Passing models were grouped onto branches in Carwow's own repository and put through final release checks: a full project parse, Carwow's CI, a rebuild against the production dependency graph and a final Snowflake comparison. More than a hundred pull requests were raised into Carwow's repository over the programme, with the majority merged into the production codebase.

    8. Ship, then verify in production. As the programme progressed, Carwow and Rittman Analytics adopted a production-led release process: models ready to run moved into production rather than waiting for every downstream check to complete. Wire re-ran the data comparisons against the production BigQuery tables after each merge, and Carwow's engineers took a direct role in reviewing and merging pull requests, reducing hand-offs and maintaining pace.

    9. Drift detection and acceptance. Because the Snowflake project kept evolving during the migration, Wire continuously checked whether translated models had drifted from their originals. Acceptance was managed through dated evidence packs listing the models ready for sign-off with supporting evidence in plain language. Throughout the programme, Carwow had a daily view of progress generated from the dbt manifest, migration register and the live state of both repositories.

    Business Benefits Delivered

    Live on BigQuery within weeks. The full estate was translated in a matter of weeks. By early September almost all in-scope models were merged to Carwow's main branch and running in production. Carwow's engineers reviewed and merged large batches of pull requests in a single day at several points, which kept the final stages moving.

    Every model checked against Snowflake. Over a thousand models were verified against their Snowflake equivalents in production before sign-off. Each result and its evidence went into the migration register, so Carwow had proof the new platform matched the old one.

    A small team, more output. A small Rittman Analytics team delivered the migration alongside Carwow's engineers. AI agents did the repeatable translation and validation work, and the people on both sides spent their time on review and release decisions.

    Existing data problems fixed on the way through. The drift and post-merge checks caught subtle differences across the live estate: join behaviour, upstream scoring logic, historical data loads. Each was traced back to its source and fixed through the normal pull request workflow before it reached the new platform.

    Standards Carwow's team still uses. The translation guide, lint rules and source-pinning practices were documented in Carwow's repository, and their engineers now apply the same patterns in day-to-day development.

    Straight into the Looker build. With the core estate on BigQuery, Carwow moved into the next phase: an enterprise data model in Looker, built with the wider data engineering team. Rittman Analytics continued into that phase for continuity.

    “We had a really tight turnaround. Awesome collaboration across the teams to achieve this. I think that it's quite miraculous, actually.”
    Becky Allsop, Director of Analytics & Data Science, Carwow

    Interested? Find Out More!

    Rittman Analytics is a boutique data analytics consultancy that helps ambitious, digital-native businesses scale-up their approach to data, analytics and generative AI.

    We’re authorised delivery partners for Google Cloud along with Oracle, Segment, Cube, Dagster, Preset, dbt Labs and Fivetran and are experts at helping you migrate and upgrade your data platform using an approach that’s right for your organisation’s needs, use-cases and budget.

    If you’re looking for some help and assistance with your data migration needs or would just like to talk shop and share ideas and thoughts on what’s going on in your organisation and the wider data analytics world, contact us now to organise a 100%-free, no-obligation call, we’d love to hear from you!

    How it starts

    From first call to first insight

    1

    Discovery call: 30 minutes

    We listen, ask the awkward questions, and tell you whether we can help.

    2

    Discovery & strategy sprint: 2-4 weeks

    We map your stack, model the business questions, and hand you a costed roadmap you could run without us.

    3

    Agile delivery: 2-week sprints

    A named senior team builds alongside yours, transferring knowledge as it goes.

    Ready to build a data function that drives growth?

    A discovery call is the first step to understanding if we're the right fit to move your data capabilities forward.

    See client results ›

    45 minutes · no obligation · you'll speak with a founder, not sales

    Mark Rittman, CEO of Rittman AnalyticsLewis Baker, COO of Rittman Analytics

    What happens on the call

    with Mark Rittman, CEO or Lewis Baker, COO - not a salesperson

    • We ask about your stack, your team and what you're trying to achieve.
    • You get a clear read on where you are, and what we'd do next, whether or not that involves us.
    • No pitch deck. If we're not the right fit, we'll say so and point you somewhere better.