Import/Updating Data
On the Solve platform you have the option to import new data or update your business’ existing data into Solve to use for operations like adding data attributes or enriching your existing dataset by adding from external sources. This includes profile, order, product or marketing costs data. You may choose to either import new data or update existing data.
If you are uploading a CSV file with both new and existing data, it is highly recommended that you firstly run a data Import for the new records and then a data Update for the existing records.
Import new data
To get started with the import tool, navigate to the Settings tab in the top navigation bar. Find options for Profiles, Orders, Products and Marketing Costs respectively under Data Imports.
- Press Start a new import to begin your import.
- Upload your CSV(s). The Supported Fields section outlines the fields that work with the data that you decide to import - your CSV must include all fields in the Required column and can include as many fields under Optional as needed.
- Press Start Import once your CSV is uploaded to begin the import. Refreshing the page will show you whether your import has been successful. You also have the option to stop the import by clicking Stop Import.
- An 'Importing Complete' message will be shown when your import is successful.
Note: If your CSV includes any existing records, they will be skipped i.e. you can only import new records.
Updating Existing Data
Using the updater tool is very similar to the importer tool. Begin by navigating to the Settings tab in the top navigation bar. Find options for Profiles and Orders under Data Updates
- Press Start a new update to begin your import.
- Upload your CSV(s). You must include the Required field listed as an identifier for a given record, and any Optional fields you include will be the ones that you update.
Example: This CSV will update the phone and first_seen_at field of the two profiles. The email field cannot be changed.
email | phone | first_seen_at |
john@example.com | 123-456-789 | 2022-12-01 21:01:54 |
jane@example.com | 987-654-321 | 2023-11-01 07:13:19 |
- Press Start Import once your CSV is uploaded to begin the import. Refreshing the page will show you whether your import has been successful. You also have the option to stop the import by clicking Stop Import.
- An 'Importing Complete' message will be shown when your import is successful.
Note: If your CSV includes any new records, they will be skipped i.e. you can only update existing records.
Supported Field Datatypes
Profiles
Field | Type | Datatype | Example | Notes |
email | Required | string | jane@example.com | |
id | Optional | uuid | db9bae10-bdbc-4b85-91e8-bdad85011ba5 | |
first_name | Optional | string | Jane | |
last_name | Optional | string | Smith | |
phone | Optional | string | 6123456789 | |
first_seen_at | Optional | timestamp | 2022-12-01 21:01:54 | YYYY-MM-DD hh:mm:ss.fraction format |
last_seen_at | Optional | timestamp | 2024-03-22 12:34:56 | YYYY-MM-DD hh:mm:ss.fraction format |
tags | Optional | string-list | tag1, tag2, tag3 | Tags are updated in real time when a customer profile is updated via Shopify. |
custom_attributes | Optional | string | custom_<attribute_name> | Field names starting with custom_ followed by the name of the attribute will be added to the custom_attributes field on the profile. |
Orders
Field | Type | Datatype | Example | Notes |
id | Required | string | 2190381209 | External_id |
number | Required | string | 12345 | Shopify order id |
placed_at | Required | timestamp | 2022-12-01 21:01:54 | YYYY-MM-DD hh:mm:ss.fraction format |
payment_status | Required | string | PAID | Supported states: PAID, PENDING, PARTIALLY_PAID, CANCELED |
fulfillment_status | Required | string | FULFILLED | Supported states: FULFILLED, PARTIALLY_FULFILLED, PENDING, CANCELED |
currency | Required | string | USD | |
subtotal_price | Required | decimal(21,3) | 100.00 | |
total_price | Required | decimal(21,3) | 125.00 | |
total_tax | Required | decimal(21,3) | 10.00 | |
total_shipping | Required | decimal(21,3) | 20.00 | |
total_discounts | Required | decimal | 5.00 | |
customer_email | Required | string | john@solvedata.io | |
total_refunded | Optional | decimal(21,3) | 0 | |
billing_address | Optional | json | {"zip": "10013", "city": "New York", "name": "John Smith", "phone": null, "company": null, "country": "United States", "address1": "123 Example St", "address2": null, "latitude": null, "province": "New York", "last_name": "Smith", "longitude": null, "first_name": "John", "country_code": "US", "province_code": "NY"} | |
shipping_address | Optional | json | {"zip": "10013", "city": "New York", "name": "John Smith", "phone": null, "company": null, "country": "United States", "address1": "123 Example St", "address2": null, "latitude": null, "province": "New York", "last_name": "Smith", "longitude": null, "first_name": "John", "country_code": "US", "province_code": "NY"} | |
source_name | Optional | string | web | |
customer_first_name | Optional | string | john | |
customer_last_name | Optional | string | smith | |
customer_phone | Optional | string | 6122123123 | |
discount_codes | Optional | string-list | welcome2024, christmas2023 | Multiple discount codes supported |
payment_methods | Optional | string-list | shopify_payments, visaPayments | Multiple payment methods supported |
cart_token | Optional | string | 550e8400-e29b-41d4-a716-446655440000 | |
items | Optional | json | [{"name": "2023 Solve Sneakers"}, "quantity": 1, "price": 56.0, "sku": SOLVE-123", "requires_shipping": null, "taxable": true, "fulfillment_status": "Delivered"] | Multiple items supported |
tags | Optional | string-list | tag1, tag2, tag3 | Tags from Shopify |
Products
Field | Type | Datatype | Example | Notes |
id | Required | uuid | 123456 | |
variant_id | Required | string | 789101 | |
sku | Required | string | SOLVE-123 | |
price | Required | decimal(21,3) | 56 | |
currency | Required | string | USD | |
images | Required | json | [{"width":1080, "height":1080, "alt":null, "src":"https://www.solvedata.io/images_1"}] | Multiple images supported |
title | Optional | string | 2023 Solve Sneakers | |
variant_title | Optional | string | Black 2023 | |
description | Optional | string | New Solve sneakers, 2023 edition |
Marketing Costs
Field | Type | Datatype | Example | Notes |
name | Required | string | Instagram | |
amount | Required | decimal(21,3) | 956.76 | |
currency | Required | string | USD | |
start_date | Required | timestamp | 2024-04-21
12:34:56 | YYYY-MM-DD hh:mm:ss.fraction format |
end_date | Required | timestamp | 2024-04-25
12:34:56 | YYYY-MM-DD hh:mm:ss.fraction format |
id | Optional | uuid | 123456 | |
channel | Optional | string | Paid Social | |
sub_channel | Optional | string | Instagram |
Frequently Asked Questions (FAQs)
How can I activate the data that I have just imported?
You can utilize your data in a number of different ways. Querying, Audiences or Custom Reports.
I have just imported by data, but I cannot find particular data points immediately through querying. What is going on?
Your data is still being processed. Processing starts at 6AM UTC/2AM EST (New York) and can take an hour.
The data should be processed, but still not all the data points show up when querying. What is going on?
Ensure that if you are adding new records that you are using the importer under Data Imports, and that if you are updating records you are using the updater under Data Updates. It is likely you are mixing the two functionalities up!
I want to add a custom attribute onto a profile. How do I do that?
Follow these instructions to add custom attributes onto a profile.
What is the difference between a tag and a custom attribute on a profile?
The tags
field is populated from your Shopify store and mirrors the tags from Shopify, whereas custom attributes
should be used for any additional customer data you want to enrich the profile with.