Build an OnlyFans Analytics Dashboard
An OnlyFans analytics dashboard is a collect → store → compute → display pipeline. ofapis covers the collect step with REST endpoints for every data source, so your job is to snapshot the numbers on a schedule, diff them over time, and render the result.
Data sources
Every metric on a creator dashboard maps to one endpoint. Read them account-scoped so the same collector works for one model or a whole roster:
| Metric | Endpoint | Notes |
|---|---|---|
| Audience size | GET /accounts/{id}/subscribers |
Paginate; store the total per snapshot |
| Fans reached | GET /accounts/{id}/chats/users |
Who you can DM |
| Engagement events | GET /accounts/{id}/notifications |
Tips, likes, comments, subscribes |
| Unread badge | GET /accounts/{id}/notifications/count |
Cheap to poll for a live tile |
| Mentions | GET /accounts/{id}/mentions |
Off-profile reach |
All paths sit under https://api.ofapis.com/api/public/v1.
Collect on a schedule
There is no analytics endpoint that hands you a time series — you build one by snapshotting daily and storing the deltas yourself. A cron collector is enough:
import os, datetime, requests
BASE = "https://api.ofapis.com/api/public/v1"
H = {"Authorization": f"Bearer {os.environ['OFAPIS_KEY']}"}
ACCOUNT = 42
subs = requests.get(f"{BASE}/accounts/{ACCOUNT}/subscribers", headers=H,
params={"limit": 1}).json()
count = requests.get(f"{BASE}/accounts/{ACCOUNT}/notifications/count",
headers=H).json()
snapshot = {
"date": datetime.date.today().isoformat(),
"subscribers": subs["total"],
"unread": count["count"],
}
db.snapshots.insert(snapshot) # your storage
Poll /notifications/count often for a live badge and pull the full /notifications feed only when the count moves — that keeps credit usage down. Because failed calls aren't charged, a scheduled collector never runs up cost on a transient upstream error or an expired session.
Compute the metrics that matter
Derive everything from stored snapshots, not from live calls:
- Growth rate —
(subs_today − subs_yesterday) / subs_yesterday. - Churn — diff yesterday's subscriber IDs against today's; the missing IDs churned.
- Top spenders — sum tip notifications per fan over a rolling window.
- Response time — timestamp gap between an incoming DM and your reply.
Multi-creator rollups
For agencies, loop the same collector over each linked accountId and aggregate into an agency-level view — one token, many models. That is the natural pairing with agency automation and a CRM built on the same data.
Live vs. batch
Use webhooks for events you want on the dashboard the moment they happen (a new tip, a new subscriber) and scheduled pulls for the daily rollups. ofapis is the data layer; your charting stack or BI tool is the display layer.
FAQ
Does ofapis provide pre-computed analytics?
No — ofapis exposes the raw data (subscribers, notifications, chats) over REST. You store the snapshots and compute growth, churn and engagement yourself, which keeps the metric definitions under your control.
How do I build a time series if there's no history endpoint?
Snapshot the counts on a daily cron and persist each result. The dashboard reads from your store, so history accrues from the day your collector starts running.
How many credits does a daily collector use?
One successful call is one credit, and failed calls are free. A once-daily snapshot of a few endpoints per creator costs a handful of credits per model per day — comfortably inside the Starter plan.
Can one dashboard cover a whole agency roster?
Yes. Run the collector per accountId under a single token and roll the snapshots up to an agency view. See agency automation.
Ready to build? Get a token free and start with the Python quickstart or the live playground.