Skip to main content

Analytics Events

Event taxonomy for tracking marketplace liquidity and user behavior.

Event Naming Convention

Format: {object}_{action}

Examples: request_created, offer_accepted, deal_completed

Core Marketplace Events

Request Events

request_started

  • When: User taps "Post Request" button
  • Properties:
    • user_id: UUID
    • platform: ios/android/web

request_category_selected

  • When: User selects category in request form
  • Properties:
    • category: phone/accessory

request_submitted

  • When: User taps submit button
  • Properties:
    • category: phone/accessory
    • budget_min: number
    • budget_max: number
    • location_city: string

request_created

  • When: Request successfully created in database
  • Properties:
    • request_id: UUID
    • buyer_id: UUID
    • category: phone/accessory
    • budget_range: number (max - min)
    • location_city: string

request_viewed

  • When: Seller views request detail
  • Properties:
    • request_id: UUID
    • seller_id: UUID
    • offer_count: number

request_closed

  • When: Request status changes to closed
  • Properties:
    • request_id: UUID
    • reason: offer_accepted/manual_close
    • offer_count: number
    • time_to_close: seconds

Offer Events

offer_started

  • When: Seller taps "Make Offer" button
  • Properties:
    • request_id: UUID
    • seller_id: UUID

offer_submitted

  • When: Seller taps submit button
  • Properties:
    • request_id: UUID
    • price: number
    • within_budget: boolean

offer_created

  • When: Offer successfully created in database
  • Properties:
    • offer_id: UUID
    • request_id: UUID
    • seller_id: UUID
    • price: number
    • price_vs_budget_max: percentage
    • request_age: seconds

offer_viewed

  • When: Buyer views offer detail
  • Properties:
    • offer_id: UUID
    • request_id: UUID
    • buyer_id: UUID

offer_accepted

  • When: Buyer accepts an offer
  • Properties:
    • offer_id: UUID
    • request_id: UUID
    • deal_id: UUID
    • price: number
    • offer_count: number (total offers on request)
    • time_to_accept: seconds (from request creation)

offer_rejected

  • When: Offer auto-rejected (another offer accepted)
  • Properties:
    • offer_id: UUID
    • request_id: UUID

Deal Events

deal_created

  • When: Deal created (offer accepted)
  • Properties:
    • deal_id: UUID
    • request_id: UUID
    • offer_id: UUID
    • buyer_id: UUID
    • seller_id: UUID
    • price: number

deal_completed

  • When: Buyer marks deal as completed
  • Properties:
    • deal_id: UUID
    • time_to_complete: seconds (from deal creation)

deal_cancelled

  • When: Buyer cancels deal
  • Properties:
    • deal_id: UUID
    • reason: string
    • time_to_cancel: seconds

Chat Events

chat_opened

  • When: User opens chat conversation
  • Properties:
    • conversation_id: UUID
    • offer_id: UUID
    • user_role: buyer/seller

message_sent

  • When: User sends message
  • Properties:
    • conversation_id: UUID
    • sender_role: buyer/seller
    • message_length: number

message_received

  • When: User receives message
  • Properties:
    • conversation_id: UUID
    • recipient_role: buyer/seller
    • delivery_method: realtime/push

Rating Events

rating_submitted

  • When: Buyer submits rating
  • Properties:
    • rating_id: UUID
    • deal_id: UUID
    • seller_id: UUID
    • rating: 1-5
    • has_review: boolean

Report Events

report_created

  • When: User reports another user
  • Properties:
    • report_id: UUID
    • reporter_id: UUID
    • reported_user_id: UUID
    • reason: string

report_reviewed

  • When: Admin reviews report
  • Properties:
    • report_id: UUID
    • action: resolved/warned/suspended

Seller Events

seller_application_started

  • When: User taps "Become Seller"
  • Properties:
    • user_id: UUID

seller_application_submitted

  • When: User submits seller application
  • Properties:
    • user_id: UUID
    • has_business_name: boolean

seller_approved

  • When: Admin approves seller
  • Properties:
    • seller_id: UUID
    • time_to_approval: seconds

seller_rejected

  • When: Admin rejects seller
  • Properties:
    • seller_id: UUID

seller_suspended

  • When: Admin suspends seller
  • Properties:
    • seller_id: UUID
    • reason: string

User Lifecycle Events

user_registered

  • When: User completes OTP verification
  • Properties:
    • user_id: UUID
    • platform: ios/android/flutter_web

user_profile_completed

  • When: User adds name and avatar
  • Properties:
    • user_id: UUID
    • has_avatar: boolean

user_logged_in

  • When: User logs in (after registration)
  • Properties:
    • user_id: UUID
    • platform: ios/android/flutter_web

user_logged_out

  • When: User logs out
  • Properties:
    • user_id: UUID

Engagement Events

app_opened

  • When: User opens app
  • Properties:
    • user_id: UUID
    • platform: ios/android/flutter_web
    • session_id: UUID

screen_viewed

  • When: User navigates to screen
  • Properties:
    • screen_name: string
    • user_id: UUID

notification_received

  • When: Push notification delivered
  • Properties:
    • notification_type: string
    • user_id: UUID

notification_tapped

  • When: User taps notification
  • Properties:
    • notification_type: string
    • user_id: UUID
    • deep_link: string

Key Performance Indicators (KPIs)

Marketplace Liquidity

Requests per Day

  • Formula: COUNT(request_created) per day
  • Target: 50+ in first month

Offers per Request

  • Formula: AVG(offer_count) per request
  • Target: 3+ average

Time to First Offer

  • Formula: MEDIAN(time between request_created and first offer_created)
  • Target: <2 hours

Deal Completion Rate

  • Formula: COUNT(deal_completed) / COUNT(deal_created)
  • Target: 30%+

User Engagement

Buyer Retention

  • Formula: % of buyers who post 2nd request within 30 days
  • Target: 40%+

Seller Response Rate

  • Formula: % of sellers who make ≥1 offer per week
  • Target: 60%+

Chat Engagement

  • Formula: % of offers that result in chat
  • Target: 80%+

Trust & Quality

Seller Approval Rate

  • Formula: COUNT(seller_approved) / COUNT(seller_application_submitted)
  • Target: 70%+

Average Seller Rating

  • Formula: AVG(rating) across all sellers
  • Target: 4.0+ stars

Report Rate

  • Formula: COUNT(report_created) / COUNT(deal_created)
  • Target: <5%

Funnel Analysis

Buyer Funnel

  1. app_opened (100%)
  2. request_started (60%)
  3. request_submitted (80% of started)
  4. request_created (95% of submitted)
  5. offer_received (70% of created)
  6. offer_accepted (40% of received)
  7. deal_completed (30% of accepted)

Seller Funnel

  1. app_opened (100%)
  2. request_viewed (80%)
  3. offer_started (50% of viewed)
  4. offer_submitted (90% of started)
  5. offer_created (95% of submitted)
  6. offer_accepted (20% of created)
  7. rating_received (80% of accepted)

Implementation

Backend (Laravel)

// Using Laravel Events
event(new RequestCreated($request));

// Event Listener
class LogRequestCreated
{
public function handle(RequestCreated $event)
{
Analytics::track('request_created', [
'request_id' => $event->request->id,
'buyer_id' => $event->request->buyer_id,
'category' => $event->request->category,
'budget_range' => $event->request->budget_max - $event->request->budget_min,
]);
}
}

iOS (Swift)

Analytics.logEvent("request_created", parameters: [
"request_id": request.id,
"buyer_id": request.buyerId,
"category": request.category,
"budget_range": request.budgetMax - request.budgetMin
])

Android (Kotlin)

firebaseAnalytics.logEvent("request_created") {
param("request_id", request.id)
param("buyer_id", request.buyerId)
param("category", request.category)
param("budget_range", request.budgetMax - request.budgetMin)
}

Flutter (Dart)

FirebaseAnalytics.instance.logEvent(
name: 'request_created',
parameters: {
'request_id': request.id,
'buyer_id': request.buyerId,
'category': request.category,
'budget_range': request.budgetMax - request.budgetMin,
},
);

Privacy Considerations

  • No PII in event properties (no phone numbers, emails, names)
  • User IDs are UUIDs (not personally identifiable)
  • Comply with GDPR/local privacy laws
  • Allow users to opt-out of analytics
  • Anonymize data after 90 days

Reporting Dashboards

Daily Dashboard

  • Requests posted today
  • Offers made today
  • Deals completed today
  • Active users today
  • New registrations today

Weekly Dashboard

  • Requests per day (trend)
  • Offers per request (trend)
  • Time to first offer (trend)
  • Deal completion rate (trend)
  • Seller approval rate

Monthly Dashboard

  • User growth (total, buyers, sellers)
  • Marketplace liquidity metrics
  • Retention cohorts
  • Revenue metrics (Phase 2)
  • Top performing sellers