Skip to main content
Analytics in GenieHelper are layered by purpose: per-post engagement is separate from period revenue rollups, which are separate from account-level growth curves. This separation keeps the data model clean and makes queries fast — you are never aggregating per-post data to get a revenue summary.
Analytics data is sourced from platform scrapes via Stagehand, not from platform APIs. This means data freshness is tied to scrape frequency (every 6 hours by default for the scrape_scheduler) and to HITL scrape sessions when platforms block headless Chrome.

Earnings history

Earnings are tracked in creator_earnings as period-by-period revenue records. Each record represents one revenue period for one platform and one content type.

What earnings records contain

FieldDescription
PeriodDate range (daily, weekly, or monthly depending on platform reporting)
PlatformWhich platform this revenue came from (OnlyFans, Fansly, etc.)
Content typeSubscription revenue, PPV, tips, custom content, referrals
Gross amountPlatform-reported gross before fees
Net amountAfter platform percentage and any applicable taxes
CurrencyISO currency code
Earnings records are append-only. Each scrape writes new period records; existing records are not updated. This preserves the audit trail and allows trend analysis over time.

Revenue breakdown

Creators can slice earnings by:
  • Platform — which platforms are generating the most revenue
  • Content type — whether subscriptions, PPV, or tips are the primary driver
  • Time period — daily, weekly, monthly, or custom date range
  • Campaign attribution — which campaigns drove measurable revenue lift (via campaign_platform_performance)

Creator goals

Creator goals in creator_goals let creators set revenue, subscriber, or engagement targets with automatic progress tracking.

Goal types

TypeExamples
RevenueHit 5,000/monthnet,reach5,000/month net, reach 50,000 annual gross
Subscriber countReach 1,000 active OnlyFans subscribers, maintain Fansly subscriber count above 500
EngagementAchieve 40% average open rate on broadcasts, hit 20 PPV purchases per week

Progress tracking

Goal progress is calculated automatically by comparing the goal target against the most recent relevant data:
  • Revenue goals compare against creator_earnings sum for the goal period
  • Subscriber count goals compare against the latest platform_stats_snapshots subscriber count
  • Engagement goals compare against post_performance_snapshots averages
Progress is surfaced in the AnalyticsAdvancedPanel (right wing) and can be called up in chat. The agent monitors goal progress and can proactively alert the creator when a goal is at risk or has been reached.
The agent can create and update creator goals via conversation. Say “set a goal to reach 1,000 OnlyFans subscribers by June” and the agent will create the record and start tracking it.

Platform growth curves

Platform growth is tracked as a time series in platform_stats_snapshots — one record per platform per scrape cycle.

What each snapshot contains

FieldDescription
PlatformWhich platform this snapshot belongs to
Follower countTotal followers at snapshot time
Subscriber countTotal active paid subscribers
Churn ratePercentage of subscribers who cancelled in the snapshot period
New subscribersNet new subscribers since the last snapshot
Snapshot timestampWhen this data was collected
Snapshots build up a growth curve over time. The AnalyticsAdvancedPanel renders this as a time series chart. The agent can identify growth inflection points and correlate them with campaign activity or posting frequency changes.
platform_stats_snapshots is append-only. The current state of a platform connection lives on the platform_connections record; historical trends live in snapshots. Never read current subscriber counts from snapshots — always use the connection record.

Campaign ROI

Campaign performance is broken down per platform in campaign_platform_performance.

Per-campaign metrics

MetricSource
ImpressionsScraped from platform post analytics
ClicksLink click counts from platform reporting
ConversionsNew subscribers or PPV purchases attributed to the campaign
RevenueGross revenue attributed within the campaign attribution window
ROI(Revenue − Cost) / Cost, where cost is entered manually by the creator
Campaign ROI is visible in the AnalyticsAdvancedPanel and can be queried in chat. The agent uses campaign performance data to recommend which content types and platforms to prioritize for future campaigns.

Post performance snapshots

Per-post engagement is tracked in post_performance_snapshots. Each record captures the live metrics for a specific post at a specific point in time.

What a performance snapshot contains

FieldDescription
Post referenceLink to the content_posts record
PlatformWhich platform this performance data is from
Snapshot timestampWhen this data was collected
ViewsTotal view count at snapshot time
LikesTotal like count
CommentsTotal comment count
SharesTotal share count (where platform exposes it)
Link clicksCTA link click count (where trackable)
RevenuePPV revenue attributed to this post

How snapshots are collected

Post performance data is collected by the scrape_post_performance handler in operations/publish.js. It uses Stagehand to navigate to each post’s analytics view on the platform and extract the current metrics. After writing the snapshot record, the handler triggers the “PUB: Snapshot Evaluated” Directus Flow, which can fire downstream automations — for example, promoting a high-performing post to a segment broadcast.
The scrape_post_performance handler was added on 2026-03-15 and is registered on the scrape-jobs BullMQ queue, not media-jobs. This keeps browser automation jobs separate from FFmpeg processing jobs.

Key collections reference

CollectionLayerPurpose
creator_earningsPeriod rollupRevenue by platform and content type per period
creator_goalsTargetsRevenue, subscriber, and engagement goals with progress tracking
platform_stats_snapshotsAccount time seriesHistorical follower count, subscriber count, churn rate
campaign_platform_performanceCampaign attributionPer-platform revenue, clicks, conversions per campaign
post_performance_snapshotsPost-level engagementLive metrics per post per platform at snapshot time

Analytics data flow

Build docs developers (and LLMs) love