Event reference

The thirty events Flowfy understands, and the properties each one needs.

Send the names exactly as written. Property names are snake_case throughout. Anything not marked required is optional, and extra properties of your own are fine — they are stored alongside the rest.

You do not need all thirty. Most stores send five: Product Viewed, Product Added, Checkout Started, Order Completed and Products Searched.

The product object

Several events carry a products array. Every entry uses the same shape:

{
  product_id: "P-4471",   // required
  sku: "WH-BLK-01",
  name: "Wireless Headphones",
  price: 199.99,
  quantity: 1,
  currency: "SAR",
  category: "Electronics",
  brand: "AudioTech",
  variant: "Black",
  position: 3,
  coupon: "SUMMER20",
  url: "https://store.example.com/p/headphones",
  image_url: "https://store.example.com/i/headphones.jpg"
}

price and quantity are worth filling in even where they are optional: when an order arrives without a total, Flowfy rebuilds revenue by summing price × quantity across the array.

Money

PropertyMeaning
valueWhat the order is worth. This is the revenue field
currencyThree-letter code — SAR, USD
subtotalBefore shipping, tax and discount
discountAmount taken off
shippingShipping charged
taxTax charged

Send value on anything carrying money; revenue is accepted as a synonym. Always send currency beside it — an amount with no currency cannot be compared against ad spend.

Browsing

EventRequiredAlso useful
Products Searchedqueryresults_count, products
Product List Viewedproducts, and one of list_id / list_name / category
Product List Filteredfilterslist_id, list_name, category, sorts, products
Product Viewedproduct_idevery product field
Product Clickedproduct_idproduct fields, list_id, list_name

filters is an array of { type, value }. sorts is an array of { field, direction }, where direction is asc or desc.

flowfyanalytics.track("Product Viewed", {
  product_id: "P-4471",
  name: "Wireless Headphones",
  price: 199.99,
  currency: "SAR",
  category: "Electronics"
});

Promotions

EventRequiredAlso useful
Promotion Viewedpromotion_id, namecreative, placement, position
Promotion Clickedpromotion_id, namecreative, placement, position

Cart and checkout

EventRequiredAlso useful
Product Addedproduct_id, quantityproduct fields, cart_id, source
Product Removedproduct_id, quantityproduct fields, cart_id
Cart Viewedcart_id, productscurrency, value
Checkout Startedcheckout_id, currency, value, productssubtotal, discount, shipping, tax, cart_id, coupon
Checkout Step Viewedcheckout_id, stepstep_name, payment_method, shipping_method
Checkout Step Completedcheckout_id, stepstep_name, payment_method, shipping_method
Payment Info Enteredcheckout_id, payment_methodorder_id, shipping_method, step

step is a whole number starting at 1. source on Product Added says where it came from: product_page, wishlist, search, listing, recommendation or other.

flowfyanalytics.track("Checkout Started", {
  checkout_id: "CHK-8821",
  currency: "SAR",
  value: 523.17,
  subtotal: 489.98,
  shipping: 22.00,
  tax: 11.19,
  products: [
    { product_id: "P-4471", name: "Wireless Headphones", price: 199.99, quantity: 1 },
    { product_id: "P-2210", name: "Phone Case", price: 145.00, quantity: 2 }
  ]
});

Orders

EventRequiredAlso useful
Order Completedorder_id, currency, value, productssubtotal, discount, shipping, tax, checkout_id, coupon, payment_method, shipping_method
Order Updatedorder_id, previous_status, current_status, changed_fieldsmoney fields, products
Order Refundedrefund_id, order_id, refund_amount, currencyreason, products
Order Cancelledorder_id, currency, valuecancellation_reason, previous_status, products

Order Completed is the one event worth getting exactly right — it is what every advertising platform optimises against.

flowfyanalytics.track("Order Completed", {
  order_id: "ORD-12345",
  currency: "SAR",
  value: 523.17,
  subtotal: 489.98,
  shipping: 22.00,
  tax: 11.19,
  coupon: "SUMMER20",
  payment_method: "mada",
  products: [
    { product_id: "P-4471", name: "Wireless Headphones", price: 199.99, quantity: 1 },
    { product_id: "P-2210", name: "Phone Case", price: 145.00, quantity: 2 }
  ]
});

order_id is what makes an order one order. Without it Flowfy cannot tell a repeated event from a second purchase, so duplicates are counted twice. transaction_id is accepted in its place. An order_id of 0 is treated as missing.

For a partial refund, send only the returned lines and the amount actually refunded. For a full refund the products array can be left out.

Coupons

EventRequired
Coupon Enteredcoupon, and one of cart_id / checkout_id / order_id
Coupon Appliedcoupon, and one of cart_id / checkout_id / order_id
Coupon Deniedcoupon, reason, and one of cart_id / checkout_id / order_id
Coupon Removedcoupon, and one of cart_id / checkout_id / order_id

coupon is the code the shopper typed. coupon_id, coupon_name and discount are optional.

Wishlist

EventRequiredAlso useful
Product Added to Wishlistproduct_id, wishlist_idproduct fields, wishlist_name
Product Removed from Wishlistproduct_id, wishlist_idproduct fields, wishlist_name

Note the lower-case to and from in those two names.

When a shopper moves something from a wishlist into the cart, send Product Added with source: "wishlist".

Sharing

EventRequiredAlso useful
Product Sharedproduct_id, share_viaproduct fields, recipient, share_message
Cart Sharedcart_id, products, share_viarecipient, share_message
WhatsApp Clickedhreftarget_phone, source, element_id, page_url, page_title

share_via is one of email, whats_app, sms, social, link, other. On Cart Shared, each entry in products needs only product_id.

Reviews

EventRequiredAlso useful
Product Reviewedproduct_id, review_id, ratingreview_body

rating is a whole number from 1 to 5.

Leads and forms

EventRequiredAlso useful
Leadlead_sourcelead_id, contact_method, form_id, status, estimated_value, currency
Form Submittedform_idform_name, action, status, fields, locale, url

lead_source is one of contact_form, lead_form, whats_app, phone, live_chat, quote_request, callback_request, newsletter, other.

Do not put a shopper's name, email or phone into Lead properties. Send them through identify instead, where they are hashed before being forwarded.

Which events count as conversions

These are treated as conversions in reporting: Order Completed, Checkout Completed, Purchase, Lead, Sign Up, Form Submitted, Contact, CompleteRegistration.

Of those, only Order Completed, Checkout Completed and Purchase carry revenue. A Lead that happens to include a products array will never have that array summed into your revenue — which is what keeps cost-per-lead honest.