Movable Ink Cloud Mode Integration Beta
8 minute read
After you have successfully instrumented Movable Ink as a destination in RudderStack, follow this guide to correctly send your events to Movable Ink in cloud mode.
Find the open source transformer code for this destination in the GitHub repository.
Create event mapping in Movable Ink
To send an event successfully to Movable Ink via RudderStack, you must set up its mapping in Movable Ink:
- Go to Customer Data Endpoints in the Movable Ink dashboard.
- Select the preferred endpoint and scroll to the Event Mappings section.
- Click New event mapping and fill the details:

- Click Create to create the event successfully.
- Click the created event, enter the JSON paths for the event properties (refer to the RudderStack JSON Path in the corresponding event’s mapping table in below sections) and click Save Fields:

- Turn the event status as Activate.
Identify
You can use the identify call to create or update a user in Movable Ink.
RudderStack maps the identify call to Movable Ink’s Identify event. You must set up the identify event mapping in Movable Ink with the match criteria as .type == "identify". See Create event mapping in Movable Ink for more information.
A sample identify call is shown:
rudderanalytics.identify("1hKOmRA4GRlm", {
name: "Alex Keener",
email: "alex@example.com",
logins: 2
})At least one of theuserId,anonymousIdfields is required to sendidentifyevents to Movable Ink.
You can send up to 1000 events in a batch with the batch request size not exceeding 1 MB.
Supported mappings
RudderStack maps the following identify event fields to the corresponding Movable Ink schema fields:
| RudderStack property path | Movable Ink schema field | Data type |
|---|---|---|
userIdRequired | UserID | String |
anonymousIdRequired | AnonymousId | String |
timestampRequired Automatically added by RudderStack in the final event payload. | Timestamp | Number (Unix timestamp) |
context.timezone | Timezone | String |
Track
You can use a track call to send the ecommerce and custom events to Movable Ink. The match criteria for any track event in the Movable Ink dashboard is .event == "Event Name". See Create event mapping in Movable Ink for more information.
At least one of theuserId,anonymousIdfields is required to sendtrackevents to Movable Ink.
You can send up to 1000 events in a batch with the batch request size not exceeding 1MB.
Supported event schemas
Movable Ink supports the following predefined event schemas (mentioned with their corresponding match criterias):
- Product (
Product Viewed) - Category (
Category Viewed) - CartAdd (
Product Added) - Search (
Products Searched) - Conversion (
Order Completed) - CartRemove (
Product Removed)
You can also create custom event schemas by clicking New Schema in the Movable Ink dashboard.
Movable Ink supports upto 20 custom properties for the Product, CartAdd, and CartRemove events. You must provide the custom property’s name and JSON path by clicking the event and adding the values in the schema fields.
Product
The match criteria for Product event in Movable Ink is .event == "Product Viewed".
A sample code is shown:
rudderanalytics.track("Product Viewed", {
product_id: "622123477358033",
sku: "9472-998-0112",
category: "Games",
name: "Age of Empires",
brand: "CEO Games",
variant: "expansion pack",
price: 49.99,
quantity: 5,
coupon: "PRE15",
currency: "USD",
position: 1,
url: "https://www.example.com/product/path",
image_url: "https://www.example.com/product/path.webp",
})RudderStack maps the following properties to Movable Ink schema fields for Product event:
| RudderStack property path | Movable Ink schema field | Data type | Note |
|---|---|---|---|
properties.product_idRequired | ID | String | - |
timestampRequired | Timestamp | Number | Unix timestamp Automatically added by RudderStack in the final event payload. |
properties.categories[] | Categories | Array | You can pass the category URL and ID under categories. For example, .url, .id. |
channel | Channel | String | Automatically added by RudderStack in the final event payload. |
properties.price | Price | Number | - |
context.timezone | Timezone | Number | - |
properties.name | Title | String | - |
properties.url | URL | String | - |
Category
RudderStack does not support any standard ecommerce event corresponding to the Category event but recommends to set the match criteria in Movable Ink as Category Viewed. However, you can configure any other event name and JSON path in the Movable Ink schema field and pass the same to RudderStack.
RudderStack maps the following properties to Movable Ink schema fields for Category event:
| RudderStack property path | Movable Ink schema field | Data type |
|---|---|---|
properties.category_idRequired | CategoryID | String |
timestampRequired Automatically added by RudderStack in the final event payload. | Timestamp | Number (Unix timestamp) |
channelAutomatically added by RudderStack in the final event payload. | Channel | String |
context.timezone | Timezone | Number |
properties.name | Title | String |
properties.url | CategoryURL | String |
CartAdd
The match criteria for CartAdd event in Movable Ink is .event == "Product Added".
A sample code is shown:
rudderanalytics.track("Product Added", {
product_id: "622113312385534c72358033",
sku: "9472-998-0112",
category: "Games",
name: "Age of Empires",
brand: "CEO Games",
variant: "expansion pack",
price: 29.99,
quantity: 5,
coupon: "PRE15",
position: 1,
url: "https://www.example.com/product/path",
image_url: "https://www.example.com/product/path.webp",
})RudderStack maps the following properties to Movable Ink schema fields for CartAdd event:
| RudderStack property path | Movable Ink schema field | Data type | Note |
|---|---|---|---|
properties.product_idRequired | ID | String | - |
timestampRequired | Timestamp | Number | Unix timestamp Automatically added by RudderStack in the final event payload. |
properties.categories[] | Categories | Array | You can pass the category URL and ID under categories. For example, .url, .id. |
channel | Channel | String | Automatically added by RudderStack in the final event payload. |
properties.price | Price | Number | - |
context.timezone | Timezone | Number | - |
properties.name | Title | String | - |
properties.url | URL | String | - |
Search
The match criteria for Search event in Movable Ink is .event == "Products Searched".
A sample code is shown:
rudderanalytics.track("Products Searched", {
query: "HDMI cable",
})RudderStack maps the following properties to Movable Ink schema fields for Search event:
| RudderStack property path | Movable Ink schema field | Data type |
|---|---|---|
properties.queryRequired | Query | String |
timestampRequired Automatically added by RudderStack in the final event payload. | Timestamp | Number (Unix timestamp) |
userIdRequired, if anonymousId is absent. | UserID | String |
anonymousIdRequired, if userId is absent. | AnonymousID | String |
channelAutomatically added by RudderStack in the final event payload. | Channel | String |
context.timezone | Timezone | Number |
properties.url | URL | String |
Conversion
The match criteria for Conversion event in Movable Ink is .event == "Order Completed".
A sample code is shown:
rudderanalytics.track("Order Completed", {
checkout_id: "ea000000000000",
order_id: "order1200000",
affiliation: "CEO Games",
total: 52.0,
subtotal: 45.0,
revenue: 50.0,
shipping: 4.0,
tax: 3.0,
discount: 5.0,
coupon: "freshorder5",
currency: "USD",
products: [
{
product_id: "622c6f5d5cf86a4c77358033",
sku: "8472-998-0112",
name: "Age of Empires",
price: 40,
quantity: 1,
position: 1,
category: "Games",
url: "https://www.example.com/product/path",
image_url: "https://www.example.com/product/path.jpg",
},
{
product_id: "577c6f5d5cf86a4c7735ba03",
sku: "3309-483-2201",
name: "Monopoly",
price: 5,
quantity: 1,
position: 2,
category: "Games",
},
],
})RudderStack maps the following properties to Movable Ink schema fields for Conversion event:
| RudderStack property path | Movable Ink schema field | Data type | Note |
|---|---|---|---|
properties.products[]Required | Products | Array | - |
properties.products[n].product_idRequired | Products.ID | String | Path within the products array. |
timestampRequired | Timestamp | Number | Unix timestamp Automatically added by RudderStack in the final event payload. |
properties.products[n].url | Products.URL | String | Path within the products array. |
properties.products[n].quantity | Products.Quantity | Number | Path within the products array. |
properties.products[n].price | Products.Price | Number | Path within the products array. |
properties.products[n].name | Products.Title | String | Path within the products array. |
channel | Channel | String | Automatically added by RudderStack in the final event payload. |
context.timezone | Timezone | Number | - |
properties.order_id | ID | String | - |
properties.revenue | Revenue | Number | - |
CartRemove
The match criteria for CartRemove event in Movable Ink is .event == "Product Removed".
A sample code is shown:
rudderanalytics.track("Product Removed", {
product_id: "622c6f5d5cf86a4c77358033",
sku: "8472-998-0112",
category: "Games",
name: "Age of Empires",
brand: "CEO Games",
variant: "expansion pack",
price: 49.99,
quantity: 5,
coupon: "PRE15",
position: 1,
url: "https://www.example.com/product/path",
image_url: "https://www.example.com/product/path.webp",
})RudderStack maps the following properties to Movable Ink schema fields for CartRemove event:
| RudderStack property path | Movable Ink schema field | Data type | Note |
|---|---|---|---|
properties.product_idRequired | ID | String | - |
timestampRequired | Timestamp | Number | Unix timestamp Automatically added by RudderStack in the final event payload. |
properties.categories[] | Categories | Array | You can pass category URL and ID under categories. For example, .url, .id. |
channel | Channel | String | Automatically added by RudderStack in the final event payload. |
properties.price | Price | Number | - |
context.timezone | Timezone | Number | - |
properties.name | Title | String | - |
properties.url | URL | String | - |
Custom events
For any custom event, you must configure the following bare minimum schema fields:
| RudderStack property path | Movable Ink schema field | Data type |
|---|---|---|
timestampRequired Automatically added by RudderStack in the final event payload. | Timestamp | Number (Unix timestamp) |
context.timezone | Timezone | String |
Common field mappings
The following table lists the common mappings relevant for both the identify and track events:
| RudderStack property | Movable Ink property |
|---|---|
traits.addresscontext.traits.address | address |
traits.createdAtcontext.traits.createdAttimestamporiginalTimestamp | createdAt |
traits.createdAtcontext.traits.createdAt | createdAtOnly |
traits.emailcontext.traits.emailproperties.emailcontext.externalId.0.id | email |
traits.emailcontext.traits.emailproperties.email | emailOnly |
timestamporiginalTimestamp | timestamp |
timestamporiginalTimestamp | historicalTimestamp |
traitscontext.traits | traits |
groupIdtraits.groupId | groupId |
traitscontext.traits | groupTraits |
userIdtraits.userIdtraits.idcontext.traits.userIdcontext.traits.idanonymousId | userId |
userIdtraits.userIdtraits.idcontext.traits.userIdcontext.traits.id | userIdOnly |
traits.namecontext.traits.name | name |
traits.titlecontext.traits.title | title |
traits.firstNametraits.firstnametraits.first_namecontext.traits.firstNamecontext.traits.firstnamecontext.traits.first_name | firstName |
traits.lastNametraits.lastnametraits.last_namecontext.traits.lastNamecontext.traits.lastnamecontext.traits.last_name | lastName |
traits.middleNametraits.middleNametraits.middle_namecontext.traits.middleNamecontext.traits.middleNamecontext.traits.middle_name | middleName |
traits.gendercontext.traits.gender | gender |
traits.phonecontext.traits.phoneproperties.phone | phone |
context.page.titleproperties.title | pageTitle |
context.page.urlproperties.url | pageUrl |
context.page.pathproperties.path | pagePath |
traits.websitecontext.traits.websiteproperties.website | website |
properties.urlcontext.page.url | GApageUrl |
properties.referrercontext.page.referrer | GApageRef |
properties.titlecontext.page.title | GApageTitle |
properties.searchcontext.page.search | GApageSearch |
traits.birthdaycontext.traits.birthdaytraits.dateOfBirthcontext.traits.dateOfBirthtraits.dateofbirthcontext.dateofbirthtraits.dobcontext.traits.dobtraits.DOBcontext.traits.DOB | birthday |
traits.statecontext.traits.state | state |
traits.countrycontext.traits.country | country |
traits.regioncontext.traits.region | region |
traits.address.citycontext.traits.address.city | city |
traits.streettraits.address.streetcontext.traits.streetcontext.traits.address.street | street |
traits.avatarcontext.traits.avatartraits.avatarURLcontext.traits.avatarURLtraits.avatar_URLcontext.traits.avatar_URL | avatar |
traits.ziptraits.zipcodetraits.zip_codetraits.zipCodetraits.postalcodetraits.postal_codetraits.postalCodetraits.address.zipcodetraits.address.zip_codetraits.address.ziptraits.address.zipCodetraits.address.postalcodetraits.address.postal_codetraits.address.postalCodecontext.traits.zipcontext.traits.zipcodecontext.traits.zip_codecontext.traits.zipCodecontext.traits.postalcodecontext.traits.postal_codecontext.traits.postalCodecontext.traits.address.zipcontext.traits.address.zipcodecontext.traits.address.zip_codecontext.traits.address.zipCodecontext.traits.address.postalcodecontext.traits.address.postal_codecontext.traits.address.postalCode | zipcode |
session_idcontext.sessionId | sessionId |
traits.countryCodetraits.address.countryCodecontext.traits.address.countryCodecontext.traits.countryCode | countryCode |