Category: Data Cloud

  • Data 360 for global brands: buried traps

    Data 360 for global brands: buried traps

    A global brand. Forty markets. Some run as single countries, some as clusters.

    And one big ambition: a single view of every customer, everywhere.

    That’s usually how a Data 360 implementation (yes, the product we all still call Data Cloud half the time) starts its life on a whiteboard.

    Cool, right?

    But here’s the thing. The whiteboard version hides five decisions that get locked in early — and some of them are genuinely painful to undo later.

    Salesforce has published a fair amount of guidance on this: architect decision guides, Trailhead modules and a fresh Flex Credits rate card. Read together, they tell a clearer story than any one of them alone.

    So, let’s have a look.

    Data 360 implementation in a nutshell

    • Instances: as few as possible, but one per region where residency demands it.
    • Data spaces: carve by region or market cluster, not by every country.
    • MDM: Data 360 is a system of reference. Your MDM stays the system of record.
    • Snowflake: ingest what you govern centrally, federate what changes often, share back what analysts need.
    • Credits: unification is the expensive line on the rate card, by a long way. Design identity resolution like it’s a budget decision — because it is.

    First, the building blocks

    If you’ve delivered a single-market Data Cloud implementation before, most of this is familiar. What changes at global scale is how these pieces combine:

    • Home org — the Salesforce org where your Data 360 instance is provisioned. Its region is the instance’s region.
    • Companion orgs — other orgs connected through Data Cloud One. They can use shared data, but they can’t ingest or unify data themselves.
    • Data spaces — logical partitions of data, metadata and processes inside one instance.
    • Unified profile — the result of identity resolution: a linked view across sources, not a mastered record.
    • Flex Credits — the consumption currency. Under this model, most processing is billed per million rows, with a different multiplier per usage type.

    How many Data 360 instances do you actually need?

    This is the first decision in any Data 360 implementation, and the hardest to reverse.

    Salesforce’s Data 360 provisioning decision guide is clear: create “the least number of Data 360 instances as possible, ideally by using Data Cloud One”. Multiple instances make sense “only… when required by compliance, residency, or organizational autonomy”.

    And the region? It’s fixed at provisioning, inherited from the home org. Changing the home org later is described as “difficult and disruptive”.

    Now here’s the part people often miss. Trailhead says it plainly: “Data spaces don’t solve data residency needs.”

    So if your EU customer data must stay in the EU, that’s a separate instance, not a separate data space.

    Where the work runs: in the home org’s region. Hard to change later: home org, region, instance count. Watch-out: zero-copy federation is region-sensitive too — a Snowflake account in the EU pairs naturally with an EU instance.

    If a client asked me tomorrow, I’d start with one question: which markets legally can’t share an instance? That list sets the instance count. Everything else is preference.

    Example scenarios

    • A retailer with strict EU residency commitments and a US business: one EU instance, one US instance, each unifying its own region.
    • A B2B manufacturer with no residency constraints across 30 markets: one instance, with the regional CRM orgs connected as companion orgs.
    Data 360 implementation topology with regional instances, market data spaces, companion orgs, MDM and Snowflake

    Carving up markets with data spaces

    Inside an instance, data spaces do the market separation. Salesforce describes them as a way to “segregate data, metadata, and processes by categories such as brand, region, or department”.

    Segments, calculated insights and activations all run in the context of a data space. Each data space gets its own permission set, so market teams only see what they should.

    The tempting move in a multi-market Data 360 implementation is one data space per country.

    Well… you can try. But the number of data spaces depends on your licences, identity resolution rulesets are configured per data space, and ruleset runs are throttled per data space too. Forty countries means forty rulesets to design, test and pay for.

    What it does: separates data, metadata, permissions and processing by market. Good grain: a region or a cluster of markets that share processes, languages or teams. Watch-out: a customer who appears in two data spaces is unified separately in each. Cross-market unification and strict separation pull in opposite directions.

    Example scenarios

    • A beauty brand groups its 12 EMEA markets into three data spaces (UK & Ireland, DACH, Southern Europe), each with its own marketing team.
    • A travel company keeps one global data space for loyalty members who book across countries, plus a separate space for a sub-brand.

    Data 360 and your MDM: reference, not record

    This one comes up in nearly every enterprise Data 360 implementation.

    “Once Data 360 is live, we won’t need the MDM.”

    But the documentation gives us more nuance than that. Salesforce says identity resolution “creates complete, actionable views of your customers but doesn’t create golden records and isn’t a master data management (MDM) system“. Unified profiles “act as a system of reference.”

    That’s an important distinction.

    So the sensible pattern is to let each do its job:

    • MDM owns the golden record, survivorship and stewardship.
    • Data 360 ingests the MDM’s mastered IDs and uses them as a match key. The Party Identification rule does exactly this — an exact match on identification number, name and type.
    • Unified profiles then stitch in everything the MDM doesn’t hold: engagement, web, commerce and app behaviour.

    Integration routes: Informatica (now part of Salesforce) offers a Data 360 connector and has announced MDM integration with Data 360; MuleSoft’s Data Cloud connector can stream records through the Ingestion API. Watch-out: I’d be careful about writing the unified profile ID back into the MDM as if it were a master key. Unification is rule-driven, so profiles can merge or split when rules or data change. Keep the MDM ID as the durable key.

    Example scenarios

    • An insurer’s MDM holds one party ID per policyholder across 15 countries; Data 360 uses it as the primary match rule, with email and phone as fallbacks.
    • A brand without an MDM uses fuzzy name plus exact normalised email — and accepts that this is a system of reference, not a mastered record.

    Snowflake: ingest, federate or share?

    If your global data team already lives in Snowflake, your Data 360 implementation gets three ways to work with it. I covered the mechanics in my zero copy trade-offs post, so here’s the multi-market lens.

    Salesforce’s interoperability decision guide gives the rule of thumb: ingest data that needs central governance, lineage or compliance; federate when governance at the source is acceptable.

    • Ingest — copy into Data 360. Best for identity data that feeds unification.
    • Live query federation — Data 360 queries Snowflake in place. Compute runs on Snowflake.
    • Accelerated (cached) federation — Data 360 keeps a cached copy, refreshed between 15 minutes and 7 days. The guide notes incremental refresh “supports upserts only”, so deletions need a periodic full refresh.
    • Share out — Data 360 objects appear in Snowflake for analysts. Salesforce’s latest Snowflake update describes them as native Iceberg tables.

    Watch-out: Snowflake’s documentation notes you can’t share an external data lake object, or a DMO mapped to one, back out. Federated data doesn’t round-trip.

    And here’s the interesting part for global brands: the guide says same-region file federation on AWS consumes no credits for the rows accessed, while cross-region does. Region alignment between Snowflake and each Data 360 instance is a cost decision, not just a latency one.

    Example scenarios

    • Ten years of order history in Snowflake, used for lifetime-value segments: federate with acceleration on a daily refresh.
    • Customer master data from the MDM, landed in Snowflake first: ingest it, because it drives identity resolution.
    Decision flow for Snowflake data in a Data 360 implementation: ingest, live query, accelerated federation or file federation

    Where Data 360 credits really go

    Now things get a little more interesting.

    The Flex Credits rate card (updated 31 August 2026) prices most work per million rows, with a multiplier per usage type. At the base tier:

    • Unification: 75,000 credits per million rows
    • Streaming pipeline: 3,500
    • Activation: 60
    • Segmentation: 50
    • Prep: 40
    • Queries: 3

    Wow — unification costs 1,250 times more per row than activation.

    So the instinct to count activations first is understandable, but the rate card points somewhere else entirely. Identity resolution design is where a Data 360 implementation wins or loses on cost.

    Data 360 Flex Credits multipliers per million rows, showing unification far above other usage types

    A few patterns follow from that:

    • Unify only the profiles you’ll use. Billing is on rows processed, not on unified profile count. Filter dormant, test and duplicate records before they reach identity resolution — Trailhead’s own example is ingesting only profiles active in the last year.
    • Freeze rulesets before go-live. A Salesforce architect writing on the Salesforce blog notes that changing a ruleset, match rule or reconciliation rule “triggers a full reprocessing of every source profile”. Iterate in a sandbox on a sample, not in production on 80 million rows.
    • Batch by default, stream by exception. Streaming pipelines cost 3,500 per million rows against 40 for prep. Most markets don’t need second-by-second freshness.
    • Match refresh cadence to change. Hourly is 24 times daily. Segments, insights and transforms should refresh as often as their inputs actually change.
    • Watch federated segments. Without acceleration, every segment preview, refresh and activation runs a new live query — and Salesforce’s credit guidance for federation bills on rows scanned, even ones filtered out.
    • Use the tiers. Multipliers drop as monthly usage per type grows, and sandbox has its own rate. Plan builds and backfills with that in mind.
    • Consider the profile models. The Data 360 pricing page also offers per-profile pricing that “un-meters the usage types used to form unified profiles”. For very large, stable populations, that might change the maths.

    Monitoring: Digital Wallet shows consumption by usage type in near real time; the monthly statement remains the source of truth.

    Example scenarios

    • A brand with 60 million source records cuts unification volume by a third by excluding contacts with no activity in three years.
    • A market team switches abandoned-basket segments from hourly to every four hours after seeing basket data only lands four times a day anyway.

    Data 360 implementation decisions at a glance

    DecisionOptionsChoose whenCredit impact
    InstancesOne global vs one per regionResidency or compliance requires separationDuplicate pipelines and unification per instance
    Data spacesPer country vs per market clusterTeams, processes and consent rules alignRulesets and runs multiply per space
    MDMData 360 as master vs MDM ID as match keyAn MDM already masters customersExact match keys keep unification lean
    SnowflakeIngest, live query, accelerated, shareGovernance vs freshness vs volumeLive: per query. Cached: per refresh
    FreshnessStreaming vs batchUse case truly needs real timeStreaming costs far more per row

    So what should we actually take away from all this?

    Here are the five questions I’d bring to the first Data 360 implementation workshop.

    1. Which markets legally can’t share an instance?

    That answer sets your instance count and your home org regions. Data spaces won’t fix it later.

    2. What’s the right grain for a data space?

    Usually a region or market cluster with shared teams and processes — not every flag on the map.

    3. Who owns the golden record?

    If you have an MDM, let it keep that job. Feed its ID into Party Identification and treat unified profiles as a system of reference.

    4. Where does each Snowflake table belong?

    Identity data in, large behavioural history federated, and analyst-facing data shared out — with regions aligned.

    5. How many rows will identity resolution actually process?

    Estimate it early in your Data 360 implementation, before you size the contract. It’s the line that dominates the bill.

    The bigger picture

    A global Data 360 implementation isn’t really a technical rollout. It’s a set of early commitments about geography, ownership and cost.

    The better question isn’t:

    “How do we get one view of every customer?”

    It’s:

    “Which customers need to be unified, where are they allowed to live, and how often does that view need to change?”

    Answer those three and the architecture — and the bill — mostly design themselves.

    The real traps aren’t in the features. They’re buried in the first workshop.


    If you’re weighing up Snowflake specifically, my post on Data Cloud zero copy trade-offs goes deeper. And if you’re planning a multi-market rollout, I’m always happy to compare notes.

  • Data Cloud zero copy: the hidden trade-offs explained

    Data Cloud zero copy: the hidden trade-offs explained

    Zero copy is one of those Data Cloud features that sounds almost too good to be true.

    Use the data sitting in Snowflake, Databricks, BigQuery or Redshift inside Salesforce… without copying it in.

    Cool, right?

    Quick naming note before we start: Salesforce renamed Data Cloud to Data 360 at Dreamforce 2025. Same platform, new name — so you’ll see both in this post, and in the documentation.

    But here’s the thing I think is worth paying attention to with Data Cloud zero copy: it isn’t one single feature.

    There are actually four different ways it can work.

    Some never store your data in Data 360. One of them does.

    Some run on your warehouse’s compute. Some don’t.

    And the cost — in Data 360 credits and on your warehouse bill — changes quite a bit depending on which one you pick.

    So, let’s have a look.

    Data Cloud zero copy in a nutshell

    If you only have 30 seconds:

    • Live query — Data 360 asks your warehouse; only the results come back.
    • Caching (acceleration) — a scheduled copy of the federated data, kept in Data 360.
    • File federation — Data 360 reads open-format files (Apache Iceberg) straight from your object storage.
    • Zero copy data sharing — the reverse direction: Data 360 data made available inside Snowflake, Databricks and co.

    The rest of this post is the detail behind those four lines.

    First, what does Salesforce mean by zero copy?

    Salesforce describes zero copy as a technology that “enables enterprises to access and query data without copying it”.

    It works in two directions:

    • Data in (zero copy data federation) — Data 360 uses data that lives in your lakehouse or warehouse, for things like segmentation and identity resolution, without ingesting it.
    • Data out (zero copy data sharing) — Data 360 data, such as unified profiles and calculated insights, is made available to an external platform without building an export pipeline.

    Out of the box, Salesforce lists Snowflake, Databricks, Amazon Redshift and Google BigQuery. The Zero Copy Partner Network launched in April 2024 with AWS, Databricks, Google Cloud and Snowflake, and Microsoft and IBM have joined since.

    Zero copy works both ways: federation in, sharing out
    Zero copy works both ways: federation in, sharing out

    The “data in” side is where it gets interesting, because Data 360 has three different ways to read that external data.

    Three ways in and where the work actually happens
    Three ways in and where the work actually happens

    Let’s get into it.

    1. Live query (query federation)

    This is the one most people picture when they hear “zero copy”.

    When Data 360 needs the data, it sends a query to the external platform. According to Salesforce’s Data 360 Interoperability guide, the query is pushed down to the source, the warehouse does the work, and only the results come back.

    Nothing is stored in Data 360.

    • Where the work runs: your warehouse
    • Freshness: as fresh as the source
    • Cost: Data 360 credits for each query and compute on your warehouse

    Example scenarios

    • A segment filters on loyalty tiers stored in Snowflake — checked when the segment publishes, not loaded overnight.
    • Order history in Redshift that’s only used now and then for an audience, so a full ingestion pipeline isn’t worth it.

    And here’s the bit to watch.

    Salesforce calls this a “pay-per-query model”, and warns that costs “may spike significantly at high QPS”. Performance also depends on the external system — overly broad queries and joins between Data 360 data and federated data are common causes of latency, according to this Salesforce blog.

    So “zero copy” doesn’t mean “zero cost”. It means the cost moves to query time.

    2. Caching (accelerated query)

    Now things get a little more interesting.

    Acceleration — you’ll also see it called caching or Accelerated Query — “temporarily stores cached copies of federated data in Data 360”.

    Yes… the zero copy option that involves a copy.

    The cache refreshes on a schedule you configure, anywhere from 15 minutes to 7 days. Queries then hit the cache instead of your warehouse, which makes them faster.

    • Where the work runs: Data 360 (your warehouse only works during refreshes)
    • Freshness: as of the last refresh
    • Cost: Data 360 credits for the rows cached, plus external storage costs

    One detail that’s easy to miss. Salesforce notes that “incremental refresh supports upserts only. Deleted records aren’t removed from the cache.” So a periodic full refresh is a good idea, otherwise deleted records can quietly hang around in your segments.

    Salesforce also says caching is “not suitable for sub-second decisioning”.

    Example scenarios

    • A daily dashboard built on a million records and viewed 20 times a day — read a lot, changes a little.
    • A product catalogue that changes weekly but is used in almost every segment.

    3. File federation

    The third option is the one the Salesforce blog calls “the third and best way” to connect to data lakes.

    Instead of asking your warehouse’s engine to run a query, Data 360 reads the data files directly from object storage — Amazon S3, Google Cloud Storage or Azure Data Lake Storage — using open table formats like Apache Iceberg. It’s read-only.

    Your warehouse’s compute isn’t involved at all.

    • Where the work runs: Data 360, reading the files directly
    • Freshness: whatever is in the files — Salesforce says it’s “not suitable for real-time dashboarding”
    • Cost: no cost on the external lake, and very little in Data 360 if you stay in the same region

    And region really matters here.

    The blog says that if your data lake and Data 360 are in the same region, “the cost is almost zero on both sides”. The architects’ guide goes further: for same-region setups, “credits aren’t consumed for the rows that are accessed”, while cross-region or cross-cloud access does consume credits.

    Performance depends on file format, partitioning and network I/O, so a well-organised lake matters.

    A note on availability: Salesforce’s zero copy page still labels file federation as beta, while Databricks’ documentationlists it as generally available. Check the current status for your platform before you design around it.

    Example scenarios

    • Years of transaction history in Iceberg tables on S3 — far too big to ingest, but useful for segments.
    • Propensity scores written to the lakehouse by the data science team, read by Data 360 in the same region.

    4. Zero copy data sharing

    And finally, the other direction.

    Data sharing makes Data 360 data available in an external platform, without an export job. The setup, as described in Snowflake’s documentation, has two parts:

    • A data share — which Data 360 objects you want to make available.
    • A data share target — the receiving account, such as your Snowflake account.

    Link the two, and the shared objects appear on the other side. In Snowflake, they show up as a data product you can mount.

    One limitation worth knowing: you can’t share an external data lake object, or a data model object mapped to one. In other words, you can’t federate data in and then share it straight back out.

    Example scenarios

    • Unified profiles and a lifetime-value calculated insight shared to Snowflake for the finance team’s BI reports.
    • The data science team trains a churn model in Databricks on shared Data 360 engagement data — and the scores come back in through federation.

    Data Cloud zero copy options side by side

    Here’s how the three “data in” options compare:

     Live queryCachingFile federation
    Stored in Data 360?NoYes, a cached copyNo
    Where the work runsYour warehouseData 360Data 360, reading files
    FreshnessReal timeLast refresh (15 min — 7 days)As current as the files
    Data 360 credits (quoted)70 per million rows retrieved2,000 per million rows cachedSame as live query; ~0 in the same region
    Cost on your sideWarehouse compute per queryExternal storageNone on the lake
    Best forFresh data, occasional useRead often, changes rarelyLarge lake data, same region

    The credit figures are the ones quoted in Salesforce’s Four lessons from implementing zero copy blog. Treat them as indicative, and check the credit consumption help article and your own contract before you build a business case.

    So what does it actually cost?

    The biggest surprise for most teams is that Data Cloud zero copy can cost money in two places: Data 360 credits, and your warehouse bill.

    Salesforce’s architects’ guide has two examples that show why the “right” option depends on how the data is used:

    • Caching wins: a dashboard on 1M records, with ~10K changes a day, viewed 20 times a day – about 600 credits a month with acceleration vs ~4,200 with live queries.
    • Live query wins: a segment published 20 times a day, on data that changes every 30 minutes – about 4,200 credits a month with live queries vs ~28,800 with acceleration.

    Same platform. Very different answers.

    The rule of thumb from the guide: if data is “accessed frequently but changes infrequently”, acceleration is typically more cost-effective.

    So what should we actually take away from all this?

    For me, the biggest takeaway is this:

    “We’re using zero copy” isn’t really a useful statement.

    Which zero copy? For which data? Read how often?

    When you’re designing a Data Cloud zero copy setup, I’d ask five questions.

    Which zero copy option fits? A quick decision flow
    Which zero copy option fits? A quick decision flow

    1. Which way is the data going?

    Into Data 360? That’s federation. Out to Snowflake or Databricks? That’s sharing.

    2. Is this core data, or everything else?

    Salesforce’s guidance is to ingest critical data for canonical data models and core governance, and use zero copy for everything else.

    3. How fresh does it need to be?

    Minutes matter → live query. Yesterday’s data is fine → caching or file federation.

    4. How often will it be read?

    Read constantly but rarely changing → caching. Changing constantly → live query.

    5. Where does it live, and who governs it?

    Same-region object storage makes file federation very attractive. Avoid cross-region access unless you really need it.

    And remember that with federation, a lot of the security lives in the source. Salesforce recommends row-level security and masking policies directly in the federated systems. As the blog puts it: “Permissions and governance are not details; they form the backbone of the entire model.”

    The bigger picture

    I think Data 360 zero copy is one of the most useful things about the platform.

    And honestly, the fact that there are four options is a good thing.

    But we need to be a bit more precise in how we talk about it.

    Instead of asking:

    Should we use zero copy?”

    I’d ask:

    Which way is the data going, how fresh does it need to be, how often will we read it, and where does it live?”

    That’s a much more useful conversation.

    Because, as we’ve seen, Data Cloud zero copy doesn’t mean zero movement — and it definitely doesn’t mean zero cost.

    It means choosing where the work happens, and who pays for it.

    So the next time someone says, “Let’s just use zero copy”, you know what to ask:

    “Well… which zero copy are we talking about?”

    If you’re curious how Data 360 data feeds the new AI features in Marketing Cloud, check out my recent post on smart features in the new Marketing Cloud Next.