FunnelMob

Rust SDK

Rust SDK - Tracking Events

Track events with the FunnelMob Rust SDK.

Use these typed methods to track standard events that ad networks like Meta and TikTok use to measure conversions and optimize campaign delivery. By sending these events, you enable ad platforms to attribute installs, optimize for high-value users, and report on key actions like purchases, signups, and engagement.

Basic usage

// Engagement & commerce
sdk.track_page_view().unwrap();
sdk.track_view_content().unwrap();
sdk.track_search().unwrap();
sdk.track_add_to_cart().unwrap();
sdk.track_add_to_wishlist().unwrap();
sdk.track_initiate_checkout().unwrap();
sdk.track_add_payment_info().unwrap();
 
// Lead generation
sdk.track_lead().unwrap();
sdk.track_complete_registration().unwrap();
sdk.track_contact().unwrap();
sdk.track_schedule().unwrap();
sdk.track_find_location().unwrap();
sdk.track_submit_application().unwrap();
 
// App events (Meta)
sdk.track_achieve_level().unwrap();
sdk.track_unlock_achievement().unwrap();
sdk.track_complete_tutorial().unwrap();
sdk.track_activate_app().unwrap();
sdk.track_rate().unwrap();
sdk.track_in_app_ad_click().unwrap();
sdk.track_in_app_ad_impression().unwrap();
 
// TikTok-specific
sdk.track_application_approval().unwrap();
sdk.track_download().unwrap();
sdk.track_submit_form().unwrap(); // TikTok legacy — use track_lead() for new implementations

Events with revenue

track_purchase, track_subscribe, track_start_trial, and track_donate require amount and currency:

// Purchase (Meta + TikTok)
sdk.track_purchase(29.99, "USD").unwrap();
 
// Subscription (Meta + TikTok)
sdk.track_subscribe(9.99, "USD").unwrap();
 
// Free trial — pass 0.0 for value (Meta + TikTok)
sdk.track_start_trial(0.0, "USD").unwrap();
 
// Donation (Meta only)
sdk.track_donate(50.00, "USD").unwrap();
 
// In-app virtual currency — value only, no currency (Meta only)
sdk.track_spent_credits(500.0).unwrap();

Events with parameters

Each typed method has a _with_params variant:

use funnelmob::EventParameters;
 
let params = EventParameters::new()
    .set("content_ids", "SKU123")
    .set("content_name", "Blue Widget")
    .set("value", 29.99_f64)
    .set("currency", "USD");
 
sdk.track_view_content_with_params(params.clone()).unwrap();
sdk.track_purchase_with_params(29.99, "USD", params).unwrap();

All 29 standard attribution events

MethodDescription
track_page_view()Fires on every page load
track_view_content()Visit to a product or content page
track_search()Search performed
track_add_to_cart()Item added to cart
track_add_to_wishlist()Item saved to wishlist
track_initiate_checkout()Checkout process started
track_add_payment_info()Payment info entered
track_purchase(amount, currency)Transaction completed
track_lead()Contact info submitted
track_complete_registration()Account registration completed
track_contact()Contact initiated
track_schedule()Appointment booked
track_find_location()Business location searched
track_customize_product()Product customized
track_submit_application()Application submitted
track_start_trial(amount, currency)Free trial started
track_subscribe(amount, currency)Paid subscription started
track_application_approval()Application approved
track_download()File downloaded
track_submit_form()Legacy Lead event — use track_lead()
track_achieve_level()Level reached in app/game
track_unlock_achievement()Achievement unlocked
track_rate()Rating submitted
track_complete_tutorial()In-app tutorial completed
track_activate_app()App launched
track_in_app_ad_click()In-app ad clicked
track_in_app_ad_impression()In-app ad shown
track_donate(amount, currency)Donation made
track_spent_credits(value)Virtual currency spent

Each method also has a _with_params variant (e.g. track_view_content_with_params(params)).

Custom Events

Track any event specific to your app that isn't covered by the standard attribution events above. Custom events are useful for measuring in-app behavior, building internal analytics, and tracking actions unique to your product.

Tracking a custom event

sdk.track_event("onboarding_complete").unwrap();

Events with Revenue

For standard events like purchases and subscriptions, use the typed methods above (e.g., track_purchase(amount, currency)). Use track_event_with_revenue only for custom events that aren't covered by the standard methods:

use funnelmob::Revenue;
 
let revenue = Revenue::usd(29.99).unwrap();
sdk.track_event_with_revenue("tip_sent", revenue).unwrap();
 
// Other currencies
let eur = Revenue::eur(19.99).unwrap();
let gbp = Revenue::gbp(14.99).unwrap();
let jpy = Revenue::new(2000.0, "JPY").unwrap();

Events with Parameters

use funnelmob::EventParameters;
 
let params = EventParameters::new()
    .set("item_id", "sku_123")
    .set("quantity", 2_i64)
    .set("price", 29.99_f64)
    .set("is_gift", false);
 
sdk.track_event_with_params("add_to_cart", params).unwrap();

Events with Revenue and Parameters

let revenue = Revenue::usd(99.00).unwrap();
let params = EventParameters::new()
    .set("recipient", "user_456")
    .set("message", "Great work!");
 
sdk.track_event_with_revenue_and_params("tip_sent", revenue, params).unwrap();

Standard Events (Legacy Constants)

For backward compatibility, FM_-prefixed string constants are still available:

use funnelmob::standard_events;
 
sdk.track_event(standard_events::FM_REGISTRATION).unwrap();
sdk.track_event(standard_events::FM_LOGIN).unwrap();
sdk.track_event(standard_events::FM_PURCHASE).unwrap();
sdk.track_event(standard_events::FM_ADD_TO_CART).unwrap();
sdk.track_event(standard_events::FM_CHECKOUT_START).unwrap();
sdk.track_event(standard_events::FM_LEVEL_COMPLETE).unwrap();
sdk.track_event(standard_events::FM_TUTORIAL_COMPLETE).unwrap();
sdk.track_event(standard_events::FM_SUBSCRIBE).unwrap();
sdk.track_event(standard_events::FM_START_TRIAL).unwrap();
sdk.track_event(standard_events::FM_RATE).unwrap();
sdk.track_event(standard_events::FM_SHARE).unwrap();
sdk.track_event(standard_events::FM_INVITE).unwrap();
sdk.track_event(standard_events::FM_ACHIEVEMENT).unwrap();
sdk.track_event(standard_events::FM_SPEND_CREDITS).unwrap();

Async Event Tracking

With the async feature enabled:

sdk.track_event_async("app_start").await.unwrap();
 
sdk.track_event_with_revenue_async(
    "tip_sent",
    Revenue::usd(29.99).unwrap()
).await.unwrap();
 
sdk.track_event_with_params_async(
    "signup",
    EventParameters::new().set("method", "email")
).await.unwrap();
 
sdk.flush_async().await.unwrap();

Validation

Event names and revenue are validated:

use funnelmob::validation::{validate_event_name, validate_currency};
 
// Event names: letters, numbers, underscores; must start with letter; max 100 chars
assert!(validate_event_name("purchase").is_ok());
assert!(validate_event_name("level_2_complete").is_ok());
assert!(validate_event_name("2nd_level").is_err());  // Can't start with number
assert!(validate_event_name("my-event").is_err());   // No hyphens
 
// Currency: 3-letter uppercase ISO 4217
assert!(validate_currency("USD").is_ok());
assert!(validate_currency("usd").is_err());  // Must be uppercase