Okay so here's something that used to frustrate me endlessly: OnlyFans shows you your earnings, but there's no actual button to download them. No export. No spreadsheet. Just numbers sitting in their dashboard that you can't take anywhere.
Which is a problem, because those numbers are your business. You need them for taxes, for tracking whether you're actually growing month over month, for figuring out what's working. You can't run a real business off vibes and gut feelings.
Here's the fix: you paste a small piece of code into your browser, and your full earnings history downloads as a spreadsheet file in about 3 seconds. I know “paste code into your browser” sounds intimidating if you've never done it before — but it's genuinely not. You're not installing anything, you're not giving any app access to your account. You're just telling your browser to grab the data that's already on screen and turn it into a file.
Here's the exact process, step by step.
The first time through takes about 5 minutes while you find your way around. Every time after that? Under 60 seconds. This is a once-a-month job, not a chore.
This works best in Chrome or Firefox on desktop. Safari users: you'll need to enable Developer Tools first — go to Safari → Settings → Advanced and check “Show features for web developers” at the bottom. After that, the shortcut is Option + Cmd + C. Won't work on your phone regardless of browser.
Step 1 — Go to Statements, then the Earnings tab
Log into OnlyFans on your computer. In the left sidebar, click Statements. Once you're there, you'll see a few tabs in the middle of the page — click Earnings (it should already be selected by default).
You'll see a big table of all your transactions — tips, subscription payments, PPV sales, everything. Now here's the part people miss: you need to scroll all the way to the bottom of this page.
OnlyFans loads your earnings in batches as you scroll, kind of like an Instagram feed. If you don't scroll to the bottom first, the export will only grab the transactions that are currently on screen — which is probably just your most recent stuff.
Scroll slowly down the Earnings tab until no new rows appear. That means everything is loaded. Then you're ready for the next step. Yes, if you have a lot of transactions this takes a minute. It's worth it.
Step 2 — Open your browser console
Still on the OnlyFans Earnings tab, you're going to open something called the “console.” This is just a text box that every browser has built into it — developers use it all the time, but honestly anyone can use it. You're not hacking anything, you're just opening a tool that's already there.
Open it with one of these shortcuts:
Option + Cmd + J
or: right-click anywhere on the page → Inspect → Console tab
F12
or: right-click anywhere on the page → Inspect → Console tab
A panel will slide open at the bottom or side of your browser. It might look chaotic in there — warnings, red text, all kinds of stuff. Completely normal, ignore all of it. Just find the tab at the top of that panel labeled Console and click it. You'll see a blinking cursor or a > symbol. That means you're in the right place.
Step 3 — Copy the code below and paste it in
Hit the Copy button, click inside the console (where the cursor is blinking), paste it, and press Enter.
That's it. Your browser will immediately download a file called Earnings_Export.csv to your Downloads folder. No loading screen, no confirmation popup — it just appears.
// 1. Go to OnlyFans → Statements → Earnings tab // 2. Scroll to the bottom so ALL transactions are loaded on screen // 3. Paste this into your browser console and press Enter const rows = document.querySelectorAll('table.m-earnings tbody tr'); let csvContent = "Date,Gross Amount,Fee,Net,Description,Status\n"; rows.forEach(row => { const date = row.querySelector('.b-table__date')?.innerText.trim() || ""; const gross = row.querySelector('.b-table__amount')?.innerText.trim() || ""; const fee = row.querySelector('.b-table__fee')?.innerText.trim() || ""; const net = row.querySelector('.b-table__net')?.innerText.trim() || ""; const desc = row.querySelector('.b-table__desc')?.innerText.trim() || ""; const cleanDesc = desc.replace(/\n/g, " ").replace(/"/g, '\""'); const cleanDate = date.replace(/\n/g, " "); csvContent += `"${cleanDate}","${gross}","${fee}","${net}","${cleanDesc}",""\n`; }); const blob = new Blob([csvContent], { type: 'text/csv;charset=utf-8;' }); const url = URL.createObjectURL(blob); const link = document.createElement("a"); link.setAttribute("href", url); link.setAttribute("download", "Earnings_Export.csv"); link.style.visibility = 'hidden'; document.body.appendChild(link); link.click(); document.body.removeChild(link); console.log("Export complete! Check your downloads.");
If it worked, you'll see "Export complete! Check your downloads." appear at the bottom of the console, and Earnings_Export.csv will be sitting in your Downloads folder.
The most common fix: go back, scroll all the way to the bottom of the Earnings page again, wait a moment for any last rows to load, then re-paste the script. The table has to be fully loaded first.
Step 4 — Import into MyFanFolio
Head to the Finance tab in MyFanFolio and click Import CSV. The importer knows exactly what format this script exports, so everything maps automatically — date, gross, fee, net, all of it. No fiddling, no column matching.
Here's what your data looks like once it's in:
reserved for taxes
Things that might go wrong (and how to fix them)
How often should I do this?
Once a month is the sweet spot. Do it on the 1st of each month for the previous month — it takes under a minute and keeps your records current. If you set a recurring reminder in your calendar right now, you'll actually do it. The creators who stay on top of their numbers do so because they protect the time for it, even when it's just 60 seconds.
Chrome says it won't let me paste
Chrome has a security warning that pops up if you try to paste code you've copied from somewhere else. If you see a message about not pasting code you don't understand, type the words allow pasting directly into the console and press Enter. Then try pasting the script again. This is just a Chrome safety feature — it's not saying anything is wrong with the script.
The file downloaded but it's empty (or only has the header row)
This means the earnings table wasn't fully loaded when the script ran. Go back to the Earnings tab, scroll slowly all the way to the very bottom, wait a couple seconds for any new rows to load in, and run the script again. The script can only see what's actually on screen.
I only want one specific month, not my whole history
Unfortunately OnlyFans doesn't have a date filter on the Earnings tab, so there's no built-in way to limit what loads. Your best bet is to just scroll far enough to load the months you care about, then run the script. Once it's in MyFanFolio you can filter and view by any date range you want.
Does this give anyone access to my account?
Nope. The script runs entirely inside your own browser, on the OnlyFans tab you already have open. It reads data that OnlyFans is already showing you, packages it into a file, and downloads it. It doesn't send anything anywhere, it doesn't communicate with any server, and nothing outside your browser ever sees it.