OnlyFans + Google Sheets
There is no OnlyFans add-on in the Google Workspace Marketplace, and you don't need one. Google Sheets ships with Apps Script, and its UrlFetchApp service makes authenticated HTTPS calls to any REST API. Point it at ofapis and you can pull subscribers, earnings and message stats straight into cells — then chart them with the tools you already know.
The mechanism: UrlFetchApp inside Apps Script
Open your sheet, go to Extensions → Apps Script, and paste a function that sends the Bearer token in the header. Store the key in Project Settings → Script Properties (OFAPIS_KEY) so it never sits in a cell or in shared code.
function pullSubscribers() {
const key = PropertiesService.getScriptProperties().getProperty('OFAPIS_KEY');
const url = 'https://api.ofapis.com/api/public/v1/accounts/42/subscribers?limit=100';
const res = UrlFetchApp.fetch(url, {
headers: { Authorization: 'Bearer ' + key },
muteHttpExceptions: true
});
const rows = JSON.parse(res.getContentText()).data;
const sheet = SpreadsheetApp.getActive().getSheetByName('Fans');
sheet.clearContents();
sheet.appendRow(['id', 'username', 'subscribedAt', 'totalSpent']);
rows.forEach(f => sheet.appendRow([f.id, f.username, f.subscribedAt, f.totalSpent]));
}
muteHttpExceptions: true lets you read a non-2xx body instead of throwing — check res.getResponseCode() and back off on 429. Because ofapis charges only for successful calls, an expired-session error that returns non-2xx costs you nothing.
Worked example: nightly earnings dashboard
Add a Time-driven trigger (clock icon in the Apps Script editor → Add Trigger → Day timer, 4am–5am) calling pullEarnings. That function hits GET /accounts/42/notifications?type=tips and totals the money events, writes one row per day, and a =SPARKLINE() column plus a pivot table turns it into a live revenue dashboard. No refresh cron on your side — ofapis keeps the account session alive server-side, so the scheduled run just works night after night.
Three recipes to build
- Custom function for one metric. Wrap a call in a function like
=OFCOUNT("subscribers")so a cell shows your live subscriber count. Custom functions cache aggressively, so trigger heavy pulls from a menu item instead. - Sheet row → mass DM. Read a "campaign" tab, loop rows, and
UrlFetchApp.fetcha POST to trigger a mass DM / mailing. Usemethod: 'post',contentType: 'application/json', andpayload: JSON.stringify(body). - Transactions ledger. Paginate
GET /accounts/42/notificationsinto a transactions tab each morning, joining amounts from messageprice, for bookkeeping and payout reconciliation.
Full endpoint shapes live in the OpenAPI docs; every route works the same way from UrlFetchApp.
FAQ
Is there a Google Sheets add-on for OnlyFans?
No, and you don't need one. Apps Script's UrlFetchApp reaches every ofapis endpoint with a Bearer token, so a marketplace add-on is unnecessary.
Where should I store the API key?
Use Script Properties (Project Settings → Script Properties), not a cell or hard-coded string. Read it with PropertiesService.getScriptProperties() so it stays out of shared copies of the sheet.
How do I refresh the data automatically?
Add a time-driven trigger in the Apps Script editor. It runs your pull function on a schedule; ofapis holds the session open server-side, so there is nothing to re-authenticate.
Will hitting the sheet too often cost credits?
Only successful calls are billed one credit each. Watch for 429 responses on the Free plan's rate limit and space out triggers. See pricing and rate limits.
Where do I get a token?
Create one free — the Free plan's 250 monthly credits are plenty to build and test a full sheet before upgrading.
Related: Airtable · Zapier · all integrations