[{"data":1,"prerenderedAt":231},["ShallowReactive",2],{"content-\u002Fscrape\u002Fonlyfans":3,"content-doc-\u002Fscrape\u002Fonlyfans-inline":3},{"id":4,"title":5,"body":6,"date":221,"description":222,"extension":223,"meta":224,"navigation":226,"order":221,"path":227,"seo":228,"stem":229,"__hash__":230},"scrape\u002Fscrape\u002Fonlyfans.md","Scrape OnlyFans data without code | axiom",{"type":7,"value":8,"toc":203},"minimark",[9,18,23,26,30,38,42,44,47,51,53,56,60,62,65,68,76,78,94,106,113,115,132,141,152,156,158,161,165,169,171,174,179,182,186,189,193,196,200],[10,11],"left-hero-automate",{"description":12,"primaryText":13,"primaryTo":14,"secondaryText":15,"secondaryTo":16,"title":17},"OnlyFans pages render dynamically and don't paginate the way most sites do. Copy-pasting profile data row by row turns research into hours of clicking. axiom drives OnlyFans in a real Chromium so you can scroll, capture, and write rows to a Google Sheet automatically. There are three ways to start, with no code, with code, or with a Claude skill.","Get started no-code","#no-code","Get started code","#code","Scrape OnlyFans",[19,20,22],"h2",{"id":21},"what-i-mean-by-scraping-onlyfans","What I mean by scraping OnlyFans",[24,25],"hr",{},[27,28,29],"p",{},"Scraping OnlyFans means a bot does the click-and-capture work you would otherwise do by hand. Opening a creator's profile, reading the subscription price and offers, capturing the public post text and timestamps, pulling links to public media, and writing each row into a Google Sheet or sending it to a webhook. The bot opens OnlyFans in Chrome, scrolls until everything's loaded, and writes back what's on screen.",[27,31,32,33,37],{},"This is for ",[34,35,36],"em",{},"public"," data. Anything visible to a signed-out browser, or a signed-in browser session for accounts you legitimately have access to.",[19,39,41],{"id":40},"reading-isnt-already-solved","Reading isn't already solved",[24,43],{},[27,45,46],{},"OnlyFans does not publish a developer API for reading profile, post, or pricing data. Public scrapers based on archived HTML go stale quickly because the site renders client-side. The browser is the only stable surface, and an infinite-scroll profile plus a JS-rendered DOM is exactly the shape a browser bot handles well.",[19,48,50],{"id":49},"who-this-is-for","Who this is for",[24,52],{},[27,54,55],{},"This is for market researchers tracking subscription pricing across creators in a niche. Agencies building competitive intelligence sheets for talent they represent. Journalists and academic researchers analysing trends across publicly accessible profiles. And creators themselves, doing competitor research before launching a tier. If your workflow is \"open a list of profiles, capture the same five fields from each, paste into a sheet,\" a bot is the shortest path.",[19,57,59],{"id":58},"how-id-approach-it","How I'd approach it",[24,61],{},[27,63,64],{},"Decide first which fields you actually need. The richest data is the post grid; the cheapest is the profile header (name, subscription price, post count). Build a step that opens a profile, waits for the page to settle, captures the header fields, then optionally scrolls and captures each post tile. Loop the profile URLs from a sheet.",[27,66,67],{},"For anything that requires a signed-in session. Captures of subscriber-only post counts, for example. Load saved cookies for an account you have legitimate access to. Pace requests so the bot looks like a person, not a crawler.",[19,69,71,72],{"id":70},"scrape-onlyfans-from-a-description","Scrape OnlyFans from a description ",[73,74],"span",{"id":75},"no-code",[24,77],{},[27,79,80,81,88,89,93],{},"Describe the scrape in plain words in the ",[82,83,87],"a",{"href":84,"rel":85},"https:\u002F\u002Fchromewebstore.google.com\u002Fdetail\u002Faxiom-browser-automation\u002Fcpgamigjcbffkaiciiepndmonbfdimbb",[86],"nofollow","Chrome extension"," and it builds the steps for you. Tell it the URL pattern and what to capture. ",[82,90,92],{"href":91},"\u002Fbuild-with-no-code\u002Fdescription","Explore no-code",".",[95,96,103],"build-with-description",{":instructions":97,":maxChars":98,":secondaryLinks":99,"instructionsLabel":100,"panelHeading":101,"panelStatus":102,"primaryText":87,"primaryTo":84},"[\"For each OnlyFans profile URL in my Google Sheet, open it\",\"Capture the display name, subscription price, and post count from the profile header\",\"Scroll to the bottom until no new posts load\",\"For each public post tile, capture the post text and date\",\"Append the rows to a results tab in the sheet\"]","500","[]","Instructions","Describe your automation","Ready",[27,104,105],{},"To the right is an example. Describe the scrape and let the AI lay out the steps of your bot.",[19,107,109,110],{"id":108},"scrape-onlyfans-in-code","Scrape OnlyFans in code ",[73,111],{"id":112},"code",[24,114],{},[27,116,117,121,122,126,127,131],{},[118,119,120],"strong",{},"Build with code."," You do not have to write the script by hand. Describe the scrape to our ",[82,123,125],{"href":124},"\u002Fbuild-in-claude","Claude skill"," and it generates a ready-to-run Node script you own, then debugs it with you, fixing a selector that stopped matching or a step that stalls, until the run is clean. Prefer to write it yourself? ",[82,128,130],{"href":129},"\u002Fbuild-with-code","Explore the code tool",". Either way, the script looks like this.",[133,134,138],"build-with-code",{":secondaryLinks":99,"code":135,"filename":136,"primaryText":137,"primaryTo":124},"import { AxiomApi } from \"axiom-api\";\n\nconst axiom = new AxiomApi(process.env.AXIOM_API_KEY);\n\nawait axiom.browserOpen();\ntry {\n  \u002F\u002F Capture the public profile header for one creator\n  await axiom.goto(\"https:\u002F\u002Fonlyfans.com\u002Fexample-creator\");\n  const header = await axiom.scrape('h1, [class*=\"user-name\"]');\n  console.log(header); \u002F\u002F write this to your sheet\n} finally {\n  await axiom.browserClose();\n}\n","onlyfans.js","Generate it with the Claude skill",[27,139,140],{},"These are axiom's step functions, the same step library that powers the no-code builder, available as code. Describe the scrape to the Claude skill and it generates and debugs this script for you. It runs on our cloud Chromium, with nothing to manage.",[142,143],"ask-claude-automate",{"description":144,"eyebrow":145,"image":146,"imageAlt":147,"primaryText":148,"primaryTo":149,"secondaryText":150,"secondaryTo":124,"title":151},"Add the Claude skill and describe the scrape. It builds the bot for you, no-code or code, handling the scroll, the field capture, and the column mapping into your sheet.","Build with a Claude skill","\u002Flanding\u002Fai-assistant-merge.webp","Claude building an OnlyFans scrape from a description","Install the skill","\u002Fbuild-in-claude#install","Learn more","Build no-code or code bots with a skill.",[19,153,155],{"id":154},"what-can-you-scrape-from-onlyfans","What can you scrape from OnlyFans?",[24,157],{},[27,159,160],{},"Most of what's visible to a signed-out browser, plus signed-in extras for accounts you have legitimate access to. A couple of cases worth knowing first.",[162,163],"tone-cards",{":cards":164},"[{\"title\":\"Works well\",\"items\":[\"Capturing creator profile headers. Name, price, post count\",\"Pulling public post text and dates from a profile\",\"Monitoring subscription-price changes across a list of creators\",\"Capturing public media links\",\"Cross-checking the same list of profiles on a schedule\"]},{\"title\":\"Harder\",\"items\":[\"Profiles behind an age-gate or geo-block (handle with stored cookies)\",\"Paginated tabs that only load on click. Extra waits needed\",\"Long profiles with hundreds of posts (scroll patience required)\"]},{\"title\":\"Don't try\",\"items\":[\"Bypassing payment or subscriber-only content for accounts you don't have access to\",\"Mass-DMing creators or fans\",\"Anything against OnlyFans's terms of service\",\"Storing or republishing private content\"]}]",[19,166,168],{"id":167},"what-id-watch-out-for","What I'd watch out for",[24,170],{},[27,172,173],{},"OnlyFans is a fine site for a careful bot but a few quirks bite if you don't plan for them.",[175,176,178],"h3",{"id":177},"age-gate-on-the-first-hit","Age-gate on the first hit",[27,180,181],{},"A signed-out session will hit an age-gate page before any profile renders. Either click through it once and capture the cookie, or store the cookie that says you've accepted.",[175,183,185],{"id":184},"class-names-shift","Class names shift",[27,187,188],{},"Class names are auto-generated and rotate every redesign. Match on stable signals (a known parent structure, an aria attribute, an icon next to a known label) rather than the class itself.",[175,190,192],{"id":191},"pace-your-requests","Pace your requests",[27,194,195],{},"A bot hitting many profiles in fast succession looks like a crawler. Add a delay between iterations. A few seconds per profile is plenty for most research workflows.",[175,197,199],{"id":198},"respect-the-terms","Respect the terms",[27,201,202],{},"Public data only, and only for accounts and contexts you have legitimate reason to access. The site's terms govern what's allowed; if your use case isn't covered, don't proceed.",{"title":204,"searchDepth":205,"depth":205,"links":206},"",3,[207,209,210,211,212,213,214,215],{"id":21,"depth":208,"text":22},2,{"id":40,"depth":208,"text":41},{"id":49,"depth":208,"text":50},{"id":58,"depth":208,"text":59},{"id":70,"depth":208,"text":71},{"id":108,"depth":208,"text":109},{"id":154,"depth":208,"text":155},{"id":167,"depth":208,"text":168,"children":216},[217,218,219,220],{"id":177,"depth":205,"text":178},{"id":184,"depth":205,"text":185},{"id":191,"depth":205,"text":192},{"id":198,"depth":205,"text":199},null,"Scrape public OnlyFans data. Subscription tiers, post counts, media links. Into a Google Sheet. axiom drives OnlyFans in a real browser, no code needed.","md",{"author":225},"Alex Barlow",true,"\u002Fscrape\u002Fonlyfans",{"title":5,"description":222},"scrape\u002Fonlyfans","JhsySwPfOYOtDQuG3iWxEo7vRKzjWK-WaWN5iAQimFA",1783069600930]