Blog

How to export OnlyFans financial data

To export OnlyFans financial data, connect your creator account to CreatorAPI, request a transactions export, wait for the job to finish and download the CSV, JSONL, XLSX or ZIP file. ZIP contains tabular CSV data, not a media archive. Formula-like CSV values are escaped; use JSONL when you need the raw strings. For a dashboard, use the dated analytics endpoints to read gross revenue, platform fees, net revenue, fan spending and subscription events directly.

This guide covers the OnlyFans routes. Platform support and returned datasets can differ; use the separate reference for other platforms. CreatorAPI is an independent integration and is not an official OnlyFans API.

For OnlyFans and Fansly exports, malformed pages, stalled pagination and exhausted safety limits now fail the job instead of returning a misleading partial success. Failed output is not downloadable and uses the existing refund path. A caller-supplied max_rows is an intentional limit, not a claim of full-history coverage. CSV, XLSX and ZIP use a private row spool capped at 512 MiB; spreadsheet cell and row limits can also fail a job.

Read an OnlyFans revenue report

Start with a completed UTC day so repeated reads cover the same period. Replace {account} with your connected account ID. The example dates below are illustrative.

# read gross, net, fees and transaction count for one UTC day
curl --get "https://api.creator-api.com/v1/{account}/analytics/earnings" \
  -H "X-API-Key: $CREATOR_API_KEY" \
  --data-urlencode "start_date=2026-10-06" \
  --data-urlencode "end_date=2026-10-06"

The response includes total_gross, total_net, total_fees and count. These are transaction-ledger totals for the selected dates. Net transaction revenue is distinct from a payout to your bank and from your business profit.

Choose the right measure of fan revenue

Use GET /v1/{account}/analytics/fans with the same date filters for revenue attributed to fans during that period. Review the unattributed bucket as well as the fan rows when reconciling a total. A limited result page should not be treated as the whole roster.

Use GET /v1/{account}/analytics/fans/{fan_id}/lifetime for the provider-reported lifetime spending fields. Lifetime spending is a different measure from revenue in a date range and from revenue attributed to an acquisition campaign. Missing provider values remain unknown.

Read new and renewed subscriptions

curl --get "https://api.creator-api.com/v1/{account}/analytics/subscribers" \
  -H "X-API-Key: $CREATOR_API_KEY" \
  --data-urlencode "start_date=2026-10-06" \
  --data-urlencode "end_date=2026-10-06" \
  --data-urlencode "detailed=true"

The report separates total, new and renewed subscription events. These are events in the chosen period, not a count of currently active or unique subscribers. Detailed mode classifies subscriptions as paid or free only when dated historical prices are available. The remainder is returned as unknown_subscriptions; check complete before using the breakdown. Set detailed=false when you only need the event charts.

Create and download a CSV export

For individual ledger rows, create an export job. The format parameter is fmt. The request creates a billed export job; it does not send a message or change the creator's platform content.

curl --request POST "https://api.creator-api.com/v1/{account}/exports" \
  -H "X-API-Key: $CREATOR_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{"dataset":"transactions","fmt":"csv"}'

Use the returned job ID with GET /v1/exports/{job_id}. Wait for a successful completion before downloading with GET /v1/exports/{job_id}/download, using the same API key. Select "fmt":"jsonl" for a JSON Lines file. An export is a snapshot of the rows retrieved by that job; inspect its status and limits before treating it as a complete accounting record.

Reconcile before building a dashboard

  1. Use the same creator, UTC date range and currency for every comparison.
  2. Compare earnings with /analytics/transactions/summary and /analytics/transactions/count.
  3. Use /analytics/historical with interval=day or interval=month for monetary time series.
  4. Include unattributed revenue and every required fan page when checking fan totals.
  5. Keep subscription events, active subscribers, lifetime spending, payout transfers and campaign attribution as separate measures.

Revenue reads accept start_date and end_date; date-only ends include the whole UTC day. Subscription reports require both dates and accept a maximum 366-day range. Large detailed subscription requests can exceed the read budget; shorten the window or use detailed=false. An incomplete read should be investigated, not replaced with a zero.

Build on the documented routes

Start with the connection and authentication quickstart, then use the OnlyFans reference for the current contract. The financial analytics overview maps each reporting question to an endpoint. For event delivery and retries, read the webhook guide; periodically reconcile event-driven reports with the ledger.

Export your first transactions file today

Start free with 1,000 credits, no card required, and run a full transactions export in minutes.

Start free with 1,000 credits · no card