Planning Your Integration
Before choosing a method, it helps to settle what data Tulip needs, where it comes from, and what order it has to arrive in. This page covers all three. It applies whichever path you use — Integration Builder, the API, or file imports.
What Tulip needs to go live
Five feeds get clienteling working. Everything after that makes it better.
Must have
The platform is usable once these are flowing.
| Feed | What it gives store teams |
|---|---|
| Stores | The store list, so people and activity can be attributed to a location |
| Employees | Associate accounts, so each person signs in and owns their own book of clients |
| Customers | The client records associates search, open and follow up with |
| Product catalog | What associates browse, recommend and share |
| Orders | Purchase history, which is what makes a recommendation informed rather than a guess |
Nice to have
These deepen what the platform can do.
| Feed | What it adds |
|---|---|
| Prices | Correct pricing in the app, including by market |
| Inventory | Live stock, so associates stop promising what is not there |
| Customer preferences | Sizes, interests and notes that make outreach personal |
| Loyalty | Tier and status alongside the customer record |
| Product images | Catalog and shared looks that a customer wants to open |
Feeds can arrive in any order and be added over time. You do not need all ten to start.
How your data lines up with Tulip
In most cases the mapping is more obvious than it first appears — the concepts match, only the field names differ.
| What you call it | Where it lands in Tulip |
|---|---|
| Stores, locations, branches, doors | Stores |
| Sales associates, staff, users | Employees |
| Customer or client records, contacts | Customers |
| Product master, article master, PIM data | Catalog — Products |
| Sales, transactions, receipts | Orders |
| Price lists, price books | Prices |
| Multi-location stock, availability | Inventory |
Field names, extra attributes and localized values are handled by mapping rules — see Data Bridge — so your systems do not have to change shape to send data to Tulip.
Identifiers: the one decision worth making early
Every record you send should carry the identifier your system already uses for it — its external ID. Tulip stores it alongside its own internal ID and matches on it from then on.
This is what makes a sync repeatable. Send the same customer again with the same external ID and it updates the existing record rather than creating a second one. Get it wrong, or change it later, and you get duplicates that are tedious to unpick.
Two things to settle before the first load:
- Pick an identifier that is stable. A loyalty number or CRM record ID is a good choice. An email address is not — people change them.
- Use shared keys where they exist. EAN or GTIN for products, and your customer reference for CRM records, make matching deterministic on both sides.
You do not need to store Tulip’s own generated ID in your system. Sending your external ID is enough to find, update and link a record, so nothing on your side has to change to accommodate Tulip’s identifiers.
See Understanding Tulip IDs for how internal and external IDs relate.
Dependencies and load order
Some records refer to others, so they have to exist first — a variant cannot be created before its product, and a product cannot be filed under a category that is not there yet.
A sequence that works for an initial load:
Stores → Employees → Catalogs → Categories → Products → Variants → Customers → Orders → Prices → Inventory
One trap worth knowing: if your products have variants, their option types and option values — size, colour and their possible values — must be created before the variants that use them. This is a common gotcha for first-time loads.
The full dependency map is in Resource Dependencies — Adding resources in the correct order. It is written against the Bulk API, but the dependencies it describes are the same whichever path you use.
Keeping data current
Once the initial load is done, the question becomes how updates arrive.
- Send only what changed. Most feeds do not need a nightly full refresh. Sending changed records is faster, cheaper, and far less likely to overwrite something in the process.
- Prefer update-or-create. Tulip’s
PATCHendpoints update the fields you send and leave the rest alone, creating the record if it does not exist yet. That makes a re-run safe — a feed that runs twice does not do damage. - Match the frequency to the data. Customer and order updates are worth doing in real time, because an associate looking at a stale client record is the problem the platform exists to solve. Catalog changes are usually fine on a nightly or hourly schedule. Prices depend on the retailer: where they move with promotions, markdowns or local pricing, they may need to arrive as often as customer data; where they are stable, a scheduled refresh is enough.
- Validate before you load. Catching an incomplete record at the door is much cheaper than finding it in an associate’s client book later. See Data Bridge validators.
What Tulip needs from you
For a delivery-led onboarding, three things:
- Access — API credentials, or a file drop we can read from
- Someone who knows the data — to confirm the mapping is right, which is faster than us inferring it
- A round of testing before go-live, against real records
Related
- Integrating with Tulip — choosing a path
- Integration Builder — building and running the integration
- Best Practices — batch sizes, threading and payload limits for large loads
- Supported Business Data Entities — the full entity list