The brief#
A creator-economy founder wrote to us in French. He had found gaps throughout the tools OnlyFans gives its creators. He wanted a Chrome extension that closed those gaps inside the site's own pages and looked as if it belonged there: in effect a CRM, a record of each customer. Beside every conversation, a panel would show what that fan had spent, with notes and tags. Saved scripts, reminders and an emoji bar would sit alongside. The plan began with one creator and pointed at agencies later.
He spoke only French. Calls ran with Google Translate on a shared screen: English typed on one side, French appearing on the other, and his replies sent over WhatsApp and pasted back the other way. The shortest call lasted an hour. He was the reason it worked. He stayed optimistic, ready to try a different approach and willing to let research take its time. He wasn't a developer, but he built things, and the links he sent were about the exact problem at hand.
The hard part: a site with no API#
Two things made this product difficult. Every feature sat on top of another company's interface, so each change they shipped became a change for us to follow. And the site offered no API, official or third-party. Saif Pasha searched GitHub, GitLab and beyond and found one lead: a Python repo, four years old, that had once reverse-engineered the site's API. It no longer worked.
The way in#
That dead repo's source pointed the way. Saif studied the site's network calls in his own browser and saw that the token of a signed-in session could reach endpoints the site never displayed. He chose not to work out how the site signed its requests. The site signed them itself. The extension caught the request the page itself made for the signed-in user, copied the headers and fired it again. Heavier work went to the server, where a headless browser opened the creator's own session and captured the data while the site loaded it. From there, Saif mapped the back end.
What we built around it#
On top of that way in, our team built the extension, a web app with sign-in and plans on Stripe, and the sync that fed them both.
The first sync launched a headless browser for each fan on screen, all at once, and large creators waited minutes for their data. We moved the sync to its own server on EC2 and pointed the extension at data already stored, so it loaded at once. The next failure came when new creators signed up together, and one browser each was enough to bring the server down. The fix was a first-in, first-out queue that took creators in turn, three at a time, and refreshed each one's data every six hours.
The outcome#
The extension was published on the Chrome Web Store, Stripe handled the web app's payments, and the founder sent this:
Everything seems to be working perfectly
The founder had a product that worked, on a platform with no way in, built without a shared language. Later he sold it at a good profit. He and Saif have taken on many more projects together since.