Skip to main content
No live events right now

Data Marketplace

Real fans. Real attendance. Real signal.

Query 500K+ verified fan profiles segmented by genre, venue, city, and spend. Every row is backed by a scanned ticket and explicit consent. Covered by patent application ZW26-001USP.

500K+
Verified profiles
1.2M+
Scanned tickets
100%
Consent-gated

Authentication

The Data Marketplace requires a Marketplace key (mkt_xxxx). Request access via the developers portal. All marketplace requests use the X-Marketplace-Key header regardless of SDK config.

typescript
const rev = new Revolution({
  apiKey: 'mkt_xxxx',
  authScheme: 'marketplace',
});

Catalog

Browse all available data attributes before building a query.

typescript
const { catalog } = await rev.marketplace.getCatalog({
  sortBy: 'available_users',  // or 'price_usd' | 'attribute_key'
});

// Each attribute:
// {
//   key: 'top_genres',
//   label: 'Top Genres',
//   type: 'string[]',
//   availableUsers: 498200,
//   priceUsd: 0.0018,
//   regulatoryTier: 'pii_none',
//   consentRate: 0.94
// }

Available attributes

KeyTypeDescription
top_genresstring[]Fan's top 3 genres by attendance frequency
concerts_attended_12mintegerVerified show count in last 12 months
average_ticket_spendfloatMean ticket price across verified purchases
events_attended_rfanintegerTotal events scanned via revolution.fan NFE
citystringPrimary city (from attendance records)
zip_codestring5-digit ZIP — PII_LOW regulatory tier
spend_bandenumlow / mid / high — bucketed spend tier
fan_loyalty_tierenumcasual / regular / superfan

Querying

All queries follow a preview → execute flow. Preview is free and returns match count + cost estimate. Execute charges your account and triggers $FAN distribution to matching fans.

Preview a query

typescript
const preview = await rev.marketplace.previewQuery({
  filters: [
    { key: 'top_genres',            operator: 'contains', value: 'hip-hop' },
    { key: 'concerts_attended_12m', operator: 'gte',      value: '3' },
    { key: 'city',                  operator: 'eq',       value: 'Los Angeles' },
  ],
  attributes: ['top_genres', 'events_attended_rfan', 'average_ticket_spend'],
  queryType: 'aggregated',   // 'aggregated' | 'individual'
  regulatoryMax: 'pii_low',  // 'pii_none' | 'pii_low' | 'pii_high'
});

// preview.queryId          — use in executeQuery
// preview.matchedUsers     — 4 200
// preview.estimatedCostUsd — 8.40
// preview.fanDistribution  — $FAN sent to fans on execute

Execute a query

typescript
const result = await rev.marketplace.executeQuery({
  queryId: preview.queryId,
  deliveryFormat: 'json',   // 'json' | 'csv' | 'parquet'
});

// result.recordCount   — 4 200
// result.costUsd       — 8.40 (charged)
// result.downloadUrl   — signed S3 URL (expires 24h)
// result.fansPaid      — $FAN distributed to matched fans

Subscriptions

Subscribe to a query to get a living, auto-refreshed view. The provisioned view updates as new fans match the criteria — ideal for CRM integrations and dynamic ad audiences.

typescript
// Create a subscription
const sub = await rev.marketplace.createSubscription({
  name: 'LA Hip-Hop Superfans',
  filters: [
    { key: 'top_genres', operator: 'contains', value: 'hip-hop' },
    { key: 'city',       operator: 'eq',       value: 'Los Angeles' },
  ],
  attributes: ['top_genres', 'spend_band', 'fan_loyalty_tier'],
  refreshInterval: 'weekly',  // 'daily' | 'weekly' | 'monthly'
});

// Get current view
const view = await rev.marketplace.getSubscriptionView(sub.id);
console.log(view.recordCount);       // current matched users
console.log(view.lastMaterializedAt); // ISO timestamp
console.log(view.pendingChanges);    // fans added/removed since last refresh

Privacy & Consent

Every fan explicitly opts in to data sharing during onboarding and chooses which attributes to share. The three regulatory tiers control what can be queried:

pii_none

Fully anonymised — genre, spend band, loyalty tier, event counts. No location finer than city.

e.g. top_genres, spend_band, fan_loyalty_tier

pii_low

City + ZIP included. Fans must have opted into geo sharing.

e.g. city, zip_code, events_attended_rfan

pii_high

Enterprise only. Email hash + wallet address for CRM matching. Strict contractual controls.

e.g. email_hash, wallet_address

Fans receive $FAN tokens each time their data is queried. The amount is proportional to the number of attributes shared and the buyer's subscription tier.

Sandbox — No Key Required

The public sandbox lets you run real marketplace queries against synthetic fan data before committing to a paid key. Available at /marketplace/sandbox.

typescript
# Python — sandbox mode
from revolution_fan import RevolutionFanClient

client = RevolutionFanClient(sandbox=True)  # no api_key required
preview = client.marketplace.preview_query(
    filters=[{"key": "top_genres", "operator": "contains", "value": "hip-hop"}],
    attributes=["top_genres", "spend_band"],
    query_type="aggregated",
)
print(preview["matched_users"])  # synthetic data, realistic distribution

Seller Portal — Monetise Your Fan Data

If you own first-party fan data — a venue ticketing system, a fan community platform, a sports league CRM — you can list it on the revolution.fan marketplace and earn revenue every time a buyer queries your data.

How it works

1RegisterCreate a seller account at /marketplace/sellers/register. No approval required to start.
2Submit a Data OriginDescribe your data source — event type, fan count, consent mechanism, geographic coverage.
3AI ClassificationWe auto-classify your fields into marketplace attributes and suggest regulatory tiers.
4PublishSet your per-query price and go live. Buyers can discover and query your data immediately.
5EarnRevenue is credited to your seller account on every executed query. Withdraw via Stripe Connect.

Seller API

typescript
// Register as a seller
const res = await fetch('/api/v1/marketplace/sellers/register', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    company_name: 'Acme Venue Group',
    contact_email: 'data@acmevenues.com',
    seller_type: 'venue_operator',  // venue_operator | event_promoter | data_broker | other
    description: 'Multi-venue operator across 12 US markets',
    website: 'https://acmevenues.com',
  }),
});
const { seller_key } = await res.json();
// seller_key: "sk_xxxx" — use in X-Seller-Key header

// Submit a data origin
await fetch('/api/v1/marketplace/sellers/origins', {
  method: 'POST',
  headers: { 'X-Seller-Key': 'sk_xxxx', 'Content-Type': 'application/json' },
  body: JSON.stringify({
    name: 'Acme Venue Ticketing — 2023-2026',
    description: 'Verified ticket purchases across all Acme venues',
    event_types: ['concert', 'festival'],
    fan_count_estimate: 85000,
    geographic_coverage: ['US-TX', 'US-CA', 'US-NY'],
    consent_mechanism: 'explicit_opt_in',
    sample_fields: ['email_hash', 'genre_preferences', 'ticket_spend', 'attendance_count'],
  }),
});