Skip to content
Home » Reference » Marketplace Event Schema: The Complete Reference

Marketplace Event Schema: The Complete Reference

A complete reference for marketplace analytics. All events — from listing creation to completed transaction — with parameters, data types, and data layer examples you can copy into your tracking plan.

Marketplace tracking is fundamentally different from standard e-commerce. You have two user types — buyers and sellers — with separate funnels that need to converge at a transaction. Most analytics setups treat marketplaces like regular online stores and miss half the picture. This reference gives you a structured event schema that covers both sides of the marketplace equation.

I’ve applied this schema across property rental platforms, freelance marketplaces, and B2B procurement sites in Europe. The structure works for any two-sided platform — whether you’re matching supply and demand for apartments, services, or products.

Marketplace Funnel Overview

Marketplace analytics tracks two parallel funnels — supply (sellers/providers) and demand (buyers/seekers) — that meet at the transaction point.

Stage Supply-Side Events Demand-Side Events Metric
Discovery listing_created search_performed, listing_viewed Liquidity, search-to-view rate
Evaluation listing_updated, inquiry_received listing_saved, inquiry_sent Save rate, inquiry rate
Transaction booking_confirmed, offer_accepted booking_requested, offer_made Conversion rate, GMV
Fulfillment order_fulfilled, payout_received review_submitted, dispute_opened Completion rate, NPS

Search & Discovery Events

Search is the primary conversion driver in any marketplace. Tracking what buyers search for, how they filter results, and what they click reveals both demand patterns and supply gaps.

Event Parameters Type When It Fires
search_performed search_term string User submits a search query
results_count number
search_category string
location string
filter_applied filter_type string User applies a search filter
filter_value string
results_count number
sort_changed sort_method string User changes result sorting
previous_sort string
listing_impression listing_id string Listing card visible in search results
listing_title string
list_position number
listing_price number
seller_id string

The search_performed event with results_count = 0 is critical for marketplace health. Zero-result searches directly indicate unmet demand — if people search for “dog walker Berlin Mitte” and get nothing, you know exactly where to focus supply acquisition.

Track filter_applied to understand what attributes matter most to buyers. When I built analytics for a European rental marketplace, filter data showed that 78% of users filtered by price range before anything else, followed by location radius. That insight shifted the product team’s priority from building more filter options to improving the price and map UX.

Data Layer Example: Search Performed

window.dataLayer.push({
  "event": "search_performed",
  "search_term": "web developer",
  "results_count": 34,
  "search_category": "freelancers",
  "location": "munich"
});

Listing Interaction Events

Once a buyer finds a listing, these events track the evaluation journey — from first view to saving, comparing, and contacting the seller. This is where most marketplace drop-offs happen.

Event Parameters Type When It Fires
listing_viewed listing_id string User opens listing detail page
listing_title string
listing_category string
listing_price number
currency string
seller_id string
source string
listing_saved listing_id string User saves/favorites a listing
listing_price number
saved_count number
photo_viewed listing_id string User swipes through listing photos
photo_index number
total_photos number
seller_profile_viewed seller_id string User views seller/provider profile
seller_rating number
from_listing_id string
listing_shared listing_id string User shares a listing externally
share_method string

The source parameter on listing_viewed tells you where the buyer came from: search_results, category_browse, recommendation, saved_list, direct_link, or email_alert. This is essential for understanding which discovery channels produce the highest view-to-booking rates.

Track photo_viewed carefully — listings where users view 3+ photos convert at significantly higher rates than those where users view only the thumbnail. When I analyzed this for a vacation rental platform, the correlation was striking: listings with 8+ photos and where users viewed at least half of them had a 3.2x higher booking rate than the platform average.

Messaging & Inquiry Events

In many marketplaces, the path to transaction goes through messaging. Tracking conversations between buyers and sellers reveals trust-building patterns and conversion bottlenecks.

Event Parameters Type When It Fires
inquiry_sent listing_id string Buyer sends first message about listing
seller_id string
inquiry_type string
listing_price number
inquiry_replied listing_id string Seller responds to inquiry (server-side)
response_time number
seller_id string
message_sent conversation_id string Any message in ongoing conversation
sender_type string
message_count number
contact_revealed listing_id string Phone/email shown (if gated)
contact_type string

The response_time parameter (in minutes) on inquiry_replied is one of the most important marketplace health metrics. Sellers who respond within 1 hour typically see 2-3x higher conversion rates than those who respond after 24 hours. Track this server-side and use it to build seller quality scores.

Use sender_type values of buyer or seller on message_sent. The message count per conversation before transaction is a key metric — too many messages suggests the listing lacks information; too few might indicate the platform’s trust mechanisms (reviews, verification badges) are working well.

Booking & Transaction Events

These events track the actual conversion — when browsing becomes buying. For marketplaces, this often involves multiple steps: request, confirmation, payment, and fulfillment.

Event Parameters Type When It Fires
booking_requested listing_id string Buyer initiates booking/purchase
booking_value number
currency string
booking_dates string
guest_count number
booking_confirmed booking_id string Seller accepts the booking (server-side)
listing_id string
booking_value number
time_to_confirm number
booking_rejected booking_id string Seller declines the booking (server-side)
reject_reason string
payment_completed booking_id string Payment processed successfully
transaction_value number
currency string
payment_method string
platform_fee number
offer_made listing_id string Buyer makes a price offer
offer_amount number
listing_price number
offer_accepted listing_id string Seller accepts price offer
final_price number
negotiation_rounds number

The platform_fee parameter on payment_completed is what separates marketplace analytics from standard e-commerce. Your actual revenue is the fee, not the gross merchandise value (GMV). Always track both so your dashboards can show GMV for market size and platform fee for actual business performance.

For marketplaces with negotiation (classifieds, freelance, B2B), the offer_made and offer_accepted events reveal pricing dynamics. Track the ratio between offer_amount and listing_price to understand how much buyers expect to negotiate — and negotiation_rounds to see how quickly deals close.

Data Layer Example: Payment Completed

window.dataLayer.push({
  "event": "payment_completed",
  "booking_id": "BK-2026-00451",
  "transaction_value": 850.00,
  "currency": "EUR",
  "payment_method": "card",
  "platform_fee": 127.50
});

Listing Management Events (Supply Side)

The supply side is where many marketplace analytics setups fall short. Tracking how sellers create, manage, and optimize their listings tells you about marketplace health and supply quality.

Event Parameters Type When It Fires
listing_created listing_id string Seller publishes a new listing
listing_category string
listing_price number
photo_count number
description_length number
seller_id string
listing_updated listing_id string Seller edits an existing listing
fields_changed string
price_change number
listing_deactivated listing_id string Seller removes or pauses listing
deactivation_reason string
days_active number
listing_promoted listing_id string Seller pays for listing promotion
promotion_type string
promotion_cost number
payout_received payout_amount number Seller receives funds (server-side)
booking_id string
payout_method string

Track photo_count and description_length on listing_created to measure listing quality at creation time. These are strong predictors of conversion — listings with fewer than 3 photos or descriptions under 100 characters almost always underperform. Use this data to build smart onboarding prompts that nudge sellers toward complete listings.

The listing_promoted event is a revenue line for many marketplaces. Track promotion_type values like featured, top_of_search, highlighted, or category_spotlight. Combine promotion spend with booking data to calculate promoted-listing ROI for sellers — a metric that drives upsell conversations.

Review & Trust Events

Trust is the currency of marketplaces. Reviews, ratings, and verification events build the social proof that makes strangers comfortable transacting with each other.

Event Parameters Type When It Fires
review_submitted booking_id string Buyer leaves a review
rating number
review_length number
has_photos boolean
days_after_booking number
review_reply booking_id string Seller responds to a review
original_rating number
response_time number
identity_verified verification_type string User completes identity check
user_type string
dispute_opened booking_id string Buyer or seller opens a dispute
dispute_type string
dispute_value number
opened_by string
dispute_resolved booking_id string Dispute reaches resolution
resolution_type string
days_to_resolve number

The days_after_booking parameter on review_submitted reveals the optimal review request timing. Most marketplaces find that reviews submitted within 3 days are longer, more detailed, and have higher ratings than those submitted after a week. Use this data to optimize your review reminder emails.

Track dispute_type values like not_as_described, no_show, cancellation, quality_issue, or payment_dispute. Dispute patterns often reveal systemic issues — a spike in “not as described” disputes in a specific category signals a listing quality problem that better photo requirements or descriptions could solve.

Complete Event Map

All marketplace events at a glance, organized by user type and funnel stage.

Side Event Name Source Key Event?
Demand search_performed Client No
filter_applied Client No
sort_changed Client No
listing_impression Client No
listing_viewed Client No
listing_saved Client No
photo_viewed Client No
seller_profile_viewed Client No
listing_shared Client No
inquiry_sent Client Yes
booking_requested Client Yes
offer_made Client Yes
payment_completed Client/Server Yes
review_submitted Client No
dispute_opened Client No
Supply listing_created Client Yes
listing_updated Client No
listing_deactivated Client No
listing_promoted Client No
inquiry_replied Server No
booking_confirmed Server Yes
booking_rejected Server No
offer_accepted Server Yes
payout_received Server No
review_reply Client No
Both message_sent Client No
contact_revealed Client No
identity_verified Server No
dispute_resolved Server No

GTM Implementation Guide

Here’s how to set up the core marketplace events in Google Tag Manager. Supply-side and trust events are mostly server-side — focus your GTM implementation on demand-side interactions.

Event GTM Tag Name Trigger Type Notes
search_performed GA4 Event – search_performed Custom Event (dataLayer) Push from search handler after results load
listing_viewed GA4 Event – listing_viewed Page View or Custom Event Fire on listing detail page load
listing_saved GA4 Event – listing_saved Click – All Elements Filter by save/favorite button
inquiry_sent GA4 Event – inquiry_sent Custom Event (dataLayer) Fire on message form success callback
booking_requested GA4 Event – booking_requested Custom Event (dataLayer) Fire after booking form submission confirmed
payment_completed GA4 Event – payment_completed Custom Event (dataLayer) Fire on payment success page/callback
listing_created GA4 Event – listing_created Custom Event (dataLayer) Fire after listing publish confirmation

Marketplace-Specific Metrics

Standard web analytics metrics don’t tell the full marketplace story. These calculated metrics — derived from the events above — are what actually matter for marketplace health.

Metric Formula Healthy Range
Search-to-view rate listing_viewed / search_performed 30-60%
View-to-inquiry rate inquiry_sent / listing_viewed 5-15%
Inquiry-to-booking rate booking_requested / inquiry_sent 20-40%
Booking acceptance rate booking_confirmed / booking_requested 70-90%
Seller response rate inquiry_replied / inquiry_sent 80-95%
Avg. seller response time avg(response_time) from inquiry_replied < 4 hours
Listing quality score f(photo_count, description_length, rating) Custom
Review rate review_submitted / payment_completed 30-60%
Dispute rate dispute_opened / payment_completed < 3%

Validation Checklist

Implementation Checklist

  • listing_viewed includes the source parameter to track discovery channel
  • search_performed captures zero-result searches (results_count = 0)
  • payment_completed tracks both transaction_value (GMV) and platform_fee
  • booking_confirmed and booking_rejected are server-side, not client-side
  • inquiry_replied includes response_time in minutes
  • listing_created captures quality signals (photo_count, description_length)
  • All currency values use ISO 4217 codes (EUR, not €)
  • Seller IDs are anonymized (no PII in analytics)
  • Events work for both logged-in and guest users
  • Server-side events include GA4 client_id for attribution
  • Test complete buyer journey: search → view → inquire → book → pay → review

FAQ

How do I track both buyer and seller funnels in one GA4 property?

Use a single GA4 property with a user_type user property set to buyer, seller, or both. Create separate GA4 audiences for each type. This lets you build side-by-side funnel reports without maintaining two analytics implementations. Set the user property on login and update it if a user switches roles.

Should I use GA4 e-commerce events for marketplace transactions?

Partially. Use view_item for listing_viewed and purchase for payment_completed if you want GA4’s built-in e-commerce reports. But add custom events for marketplace-specific actions like inquiry_sent, booking_requested, and listing_created that GA4’s e-commerce model doesn’t cover. The hybrid approach gives you standard reports plus marketplace insights.

What is the most important marketplace metric to track?

Liquidity — the percentage of listings that result in at least one transaction within a given time period. Calculate it by comparing listing_created events against booking_confirmed events for those same listings. Low liquidity means either insufficient demand or overpriced supply. This single metric tells you more about marketplace health than any conversion funnel.

How do I handle tracking when the same user is both buyer and seller?

Track a user_type parameter on each event rather than assigning a single role to the user. A freelancer who also hires other freelancers fires listing_created events as a seller and booking_requested as a buyer. The event-level user_type parameter lets you attribute each action correctly without forcing users into one category.

How do I track marketplace supply-demand balance by category?

Compare search_performed counts per category (demand signals) against listing_created counts per category (supply signals). Categories where searches significantly outnumber active listings have supply gaps — these are your growth opportunities. Categories where listings vastly outnumber searches have oversupply and likely need demand-side marketing.

Further Reading


Lukas Meier
Lukas Meier

Product Analytics Specialist based in Munich. Helping teams implement clean, actionable analytics since 2015.

Leave a Reply

Your email address will not be published. Required fields are marked *