Help · Analytics

Record events from Shopify Flow

Some of what happens in your store is recorded by other apps of yours — store credit given, a product reviewed, points earned — and Shopify sends no notice of it to anybody else. Shopify Flow can pass it on. Carpe Messaging adds its own actions to Shopify Flow, and each one records what happened as an event on the person's profile here, where you can count it, build segments on it and start automations from it.

There is nothing to type but the boxes on the action: no key, no web address, no code.

You need Carpe Messaging installed from the Shopify App Store, Shopify Flow, and an app that tells Shopify Flow about the thing you want recorded. The actions work on every paid Shopify plan.

Create a workflow from the trigger your other app reports, add one of the seven Carpe Messaging actions, and fill each box with Add variable. Leave a box empty when the trigger has nothing for it.

An empty box records nothing. It never stores a blank, and it never erases a value you already have.

Six actions record a named event — a product review, store credit given, checkout credit given, credit about to expire, a credit balance and credit scheduled — and Record an event records anything else, under a name you choose.

Every action starts with the same two ways of naming the person, described in the next section. After those, these are its boxes. A box in bold must be filled; the rest are optional. The name in brackets is the property the value is recorded under — the name to use in a segment rule or an automation filter.

Records Reviewed a Product. Boxes: Reviewer name (reviewer_name), Rating (rating, a whole number), Product title (product_title), Product link (product_url), Order (order_id) and Review (review_text).

The event keeps its name whichever review app you use, so a rule about people who left five stars goes on working if you change apps.

Records Store Credit Rewarded. Boxes: Amount (amount), Amount, as shown (formatted_amount), Currency code (currency), Expires (expires_at), Campaign ID (campaign_id), Campaign name (campaign_name) and Reason (reason).

Credit a campaign gave is the same event with the campaign boxes filled, so an automation on Store Credit Rewarded catches both kinds.

Records Abandoned Checkout Credit Rewarded — store credit given to somebody who left a checkout unfinished. Boxes: Amount (amount), Amount, as shown (formatted_amount), Currency code (currency), Expires (expires_at), Checkout link (checkout_url), Checkout total (checkout_total), Checkout total, as shown (formatted_checkout_total), Items in checkout (item_count), Campaign ID (campaign_id) and Campaign name (campaign_name).

It is its own event so that an email about ordinary credit never goes out for it, and the other way round. The Checkout link is what an email's Return to checkout button uses.

Records Store Credit Expiring. Boxes: Amount (amount), Amount, as shown (formatted_amount), Currency code (currency), Expires (expires_at) and Days left (days_remaining, a whole number).

Records Store Credit Balance Updated. Boxes: Balance (balance), Balance, as shown (formatted_balance) and Currency code (currency).

Records Store Credit Scheduled — credit promised for later, not yet given. Boxes: Amount (amount), Amount, as shown (formatted_amount), Currency code (currency), Expires (expires_at) and Scheduled for (scheduled_at).

For anything the six above do not cover. What happened (event_name — the event's name, not a property) must be filled, and the rest are optional: Amount (amount), Currency code (currency), Count (count, a whole number), Label (label), Link (link), Note (note) and Reference (reference).

Choose the name once and keep it. Use the same words every time, and check the spelling — a name cannot be taken back, and two spellings are two separate events. The names your store records for itself, such as orders and checkouts, cannot be used here.

The two kinds of box hold different things. A number box, such as Amount or Balance, is what a rule compares — "at least 10". Fill it with Add variable like any other box, or type a plain figure such as 12.50; when the workflow runs, it must come out as a plain number of zero or more, with no currency sign and no commas. An Amount may be negative: -12.50 records a refund on Record an event, or an adjustment where your team takes store credit away. A balance, a total, a count, a rating and days left may not. The boxes that say as shown hold the figure the way your store prints it, such as $12.00, which is what an email should print. Dates are text, because Shopify Flow has no date box: Expires and Scheduled for hold the date exactly as the other app writes it.

Every action has a customer box and an Email address box, and one of the two is needed. On a trigger that already knows the customer, the customer box fills itself and there is nothing to do.

Filling the Email address box as well is worth the extra step. Choose Customer → defaultEmailAddress → emailAddress with Add variable. The event is then recorded even when the customer box alone is not enough.

A shopper Shopify knows only by a phone number cannot be recorded here. Every event needs an email address to belong to.

The store credit actions also keep the latest figures on the profile itself, because an email can print a profile's properties but not an event's. Each event replaces its own figures in full, so a figure the event did not carry is cleared and an email prints its fallback words.

The figures are store_credit_balance, store_credit_balance_formatted, store_credit_currency and store_credit_balance_updated_at for the balance; store_credit_last_reward_formatted, store_credit_last_reward_expires_at and store_credit_last_reward_updated_at for the most recent credit given; and store_credit_expiring_formatted, store_credit_expiring_expires_at and store_credit_expiring_updated_at for credit about to expire.

A campaign can then say "You have $24.50 in store credit", and a segment can find everyone with a balance of at least $10. The figures are only as current as the last event, and they are ordered by when each event reached us, because Shopify Flow sends no time of its own. In the rare case Shopify has to retry a step after a fault on our side, the retried figure can stand until the next event of the same kind arrives. The events themselves are the full history.

Ready-made Shopify Flow templates — one trigger and one of these actions, every box already filled — are not in Shopify Flow's library yet. They become available after Carpe Messaging is listed in the Shopify App Store and Shopify has reviewed them. Until then, build it by hand as above; it does exactly the same thing.

The event appears on the profile's activity and on the Metrics page, and its name is offered in the segment builder and as the start of an automation. The six named events are offered before the first one arrives; a name you choose in Record an event appears once one has been recorded.

It lands on the profile you already have. When the person is one of your Shopify customers, the event attaches to their existing profile.

An address you have never seen creates a new, unconfirmed profile. It is kept out of your counts and your sends until something confirms it, such as an order. The Verified identity page explains why.

Nothing recorded this way changes consent. An event says something happened. Whether you may email someone is a separate record, and these actions never touch it.

Shopify sometimes runs a step twice. The second run is recognized and nothing is recorded twice.

The reason appears in Shopify Flow's own run history, on the step that failed. These are the messages, word for word, and what each one means.

Carpe Messaging is not connected to this store, or was uninstalled. Open it from your Shopify admin to finish connecting, then run it again.

Both the customer box and the Email address box are empty. Fill one of them.

The customer box holds something that is not a customer — an order, for example. Choose the customer again with Add variable, or fill the Email address box.

The customer has no email address in your store, or none could be read. Fill the Email address box as described above.

A box that must be filled is empty, or a box received something it cannot hold. Check each box against the trigger's variables.

The number box named at the start received something that is not a plain figure when the workflow ran — most often a formatted value such as $12.00 chosen where the plain one belongs, or a figure below zero. Choose the plain variable; the formatted one goes in a box that says as shown.

The same for an Amount box, which may be negative.

The same for a box that counts — Rating, Days left, Items in checkout and Count take a whole number, never a fraction.

The What happened box on Record an event is empty or too long.

Choose the action again from Carpe Messaging's list.

Run it again. If the same message comes back, write to us.

A name only your store may record is refused with a message that names it and asks you to choose another.

For something these boxes do not carry, the Connect Shopify Flow page describes sending a request of your own from Shopify Flow. It needs a key from us and the Grow plan or above; the actions on this page need neither.