We built an app inside Instagram, then sold it

Two friends and I made an app called Mindie. It pretty much let creators sell photos on their Instagram story. They’d post a blurred version of the image with a link. Followers could tap, pay, and unlock the photo. Our creators got paid every day for about a year. And then we sold the company.1

It’s still the only company I’ve ever sold. The night we agreed to the deal, I texted my co-founder: “i kinda want to keep mindie since it’s the only cool thing i’ve ever done.” Here’s how it all unfolded.

The intro video to the app: upload a photo, set a price, post the blurred asset, get paid. It also had really nice haptics created with Taptic Touch.

The team

Nick Sarath originally bought the domain, designed the app, and talked to customers. It was the first time I had worked with him on a new app. He texted me the website on a Monday and showed me a competitor’s App Store page that night. “Yo let’s grind on Mindie this weekend,” he texted the next day. Over the next week, we agreed to split the project three ways with a backend engineer I knew from college. Nine days later, we had a TestFlight.

The backend took some work to build. The guy who ended up making it is named Adam Barr-Neuwirth, and he was incredible, but it took us a bit. It took some mistakes to get there.

Selling from your story

“Sell anything on your story” was the App Store subtitle.2 That was the concept. Creators already had their audience on Instagram, so we wanted to reduce the friction to enable them to sell as much as possible. The link-in-bio flow was too cumbersome.

We came up with this idea to sell straight from the story. A creator would upload their photo to our app, set the price,3 and then Mindie would create a blurred asset and a link.4 From there, it was one tap to add the asset to your Instagram story, and then you’d copy the link and post it. A follower could see the blur, tap Apple Pay, and get the photo. For payments, we used Stripe. The creator cashed out to their bank at the full price. Buyers paid the fee.5

An Instagram Story from elenakamperi: a blurred photo in a white frame with a padlock, Unlock for 4,00 €, an arrow, and a link sticker reading EXCLUSIVE VERSION, with the word mindie belowA second story from the same account: blurred photo, Unlock for 3,00 €, and a link sticker reading GOLDEN HOURA third story: blurred photo, Unlock for 3,00 €, a link sticker reading ICE ICE BABY, and Instagram’s Add to your story button
The product live on launch day. Nick screenshotted this from Elena’s stories. She posted three stories with three prices. Followers saw the blurred photo.

Here are some screenshots from the product.

Safari on mindie.so: the word mindie, a blurred photo with a padlock and the text Unlock for $1.50, and a black Apple Pay buttonThe Mindie home tab: a large Add media area, Set a price at $0.00, and a disabled Generate link button, with Home, Links, Cash Out, and Account tabs along the bottomThe Mindie account tab: a green Make more money card offering 5% commission on referred creators, a referral link, and a Getting started row of video tutorials
From my camera roll. On the left is the page buyers would land on in the Instagram browser. The other two are the creator app, where they could add the media, set the price, generate the link, and see their account.

A product storyboard: Mindie is an app that empowers people to start their own retail store on Instagram, in four phone frames: upload your product, set a price, add to InstagramA frame from our pitch deck. Upload, price, post.

Building on Instagram

It’s hard to build an app on Instagram. At the time when we started, the Instagram browser had just allowed Apple Pay, so we used that as an opportunity to create an app that came directly out of the stories.6 We couldn’t create any dynamic UI on the story, of course, so we had to rely on links and whatever would pop up in their browser.

The whole product came from that limitation. The image we gave creators had to preview the content, show the price, and entice users to make a purchase. The blur actually took some engineering and had to be precise. We had it depend on the image that was uploaded, and then, of course, we had to make it match the website exactly. As the backend engineer said, “when they jump from insta to web they need to look the same or people will think they’re getting conned.”

We wanted the app to be amazing, so we had to teach creators how to create their story properly. The share sheet uses the clipboard, so we couldn’t just copy the link directly. We had to have them come back to the app after attaching the image. Since it was a two-step process, we created a tutorial for them. Here’s how that tutorial looked in code.

static let post = Tutorial(
    "How to attach the link to your Story",
    resourceName: "Posting Tutorial",
    screens: [
        Screen(text: [.text("Tap the"), .image("smiley"), .text("button")], stop: 1.47),
        Screen(text: [.text("Tap the"), .image("LINK"), .text("button")], stop: 4.91),
        Screen("Paste your link", stop: 8.27),
        Screen("Frame the link", stop: 13.6)
    ]
)
Posting Tutorial.mp4 from the repo’s asset catalog. The app paused at 1.47, 4.91, 8.27, and 13.6 seconds, then prompted you to press Next to see the next segment.

We tried to make the app as simple as possible, so everything would go towards the aim of posting more photos.

Getting approved by Apple

Instagram was hard to deal with, but Apple was actually harder.

We submitted the app in July but didn’t get approved for two months. We hit rejection after rejection, and they got increasingly vague. Meanwhile, there was a competitor with basically the same idea that seemed to get in immediately. Adam wrote the group, “getting the app review messages makes me more mad than ive ever been in my entire life.” Ultimately, we resubmitted the app under a different name as a link generator only, with screenshots of galaxies and mountains.

App Store screenshots for an app called linkgenerator: two phones, one showing Upload your media with a photo of a person on a mountain under a starry sky, the other showing Generate link with a purple nebulaThe App Store screenshots that we finally got approved. We made it seem like a simple link generator. When it went live, Nick texted the group, “the fuck,” and I replied, “We live boi.”

It actually worked

The first creator post was in June, before the App Store or the LLC. While the product was just a TestFlight link, the creator managers were very upset by this. One creator with a pretty big following put three Mindie stories up, and in a few hours, Nick was watching the Stripe and texting the group the numbers.

Instagram story insights: a small thumbnail of a Mindie story, then Link Clicks 3,045, Navigation 102,039, Forward 71,986, Exited 20,804, Next story 8,624, Back 625, Profile activity 1,335Her insights in the morning: 3,000 link taps from the one story. About 3% of people who tapped paid, which her manager said was “drastically better” than OnlyFans conversion.

On the day of launch in July, the same creator posted three more stories, and the group chat has messages from Adam saying, “Ok it works,” and then “100 purchases 🎉” in five hours. Two weeks later, I wrote in the group, “i never seen money like this.”

Jul2023SepNovJan2024MarMaysold42 weeks of Stripe payouts, launch to sale and after
Every Stripe payout by week. The first ones came while the app was still in review. The best week was in September. The pink bars are sales that continued after we sold the company.

In September, the day after the App Store finally approved us, one creator with a million followers posted, and here’s a screenshot from my phone.

An iPhone lock screen at 7:32 filled top to bottom with Stripe notifications, each reading You received a payment of $24.00, the newest marked now and the oldest 5m ago$24 purchases. Nick said to the group, “Let’s not throw away this opportunity.”

Creators set their own prices, and the followers seemed ready to pay. One person tried $26, and it seemed to work. Another person posted a link to a Telegram group instead of an Instagram story, and it worked there as well. We built a referral program to encourage creators to bring people they knew. They could earn 5% of everything that other person sold, forever.

The drama

The original backend engineer we worked with was much older and had a day job. When I first started building the app, the backend kept going down. One Sunday in June, Nick and I called him and told him we were replacing him. That evening, he revoked our access to payment accounts, the domain, and every company email address.7

But Adam rebuilt the entire backend from nothing in about two days. I incorporated a new company that week and named it Monetize Your Stories LLC. The name was specifically chosen because it’s what would appear on the App Store. An old Nikita Bier trick.

Then disaster. Seven weeks later, Nick sent our group an App Store link. It was our app: the same screens, the same tutorial, the same landing page, only the name was changed, and it was already approved by the App Store. Nick’s side-by-side comparison is below. We didn’t know what to do about it, but ultimately decided the only answer was to launch our product.

Side by side comparison strips of two apps in pairs: a black splash screen, a Set a price screen, an Earnings screen, and an onboarding screen, near-identical in each pairOur apps side by side. The one on the left is Mindie. Eventually, the other app changed design, and we never spoke to him again.

Turbulence

The backend engineer leaving to clone the app was tough. Nick wrote at the end of August, “i don’t even want Mindie to be big I just want to land the plane.”

The weird thing is the app was doing fine. It hit its best numbers in September, right as the three of us were getting pulled in other directions. In November, we were talking about winding it down. Adam was manually moving money every week but said he was fine doing that, so it ran for a while. Creators would post, and followers would pay.

We had talked about selling the app since March, before we had even built it. Nick took acquisition meetings. He mentioned that a creator subscription company was “down to acquire us” in September. In January, Nick asked, “should we list it for sale.”

The acquisition

In February, a friend introduced me over text to his sister Shelby, a micro-influencer who “has wanted to work on something like this.” She called us the next day, then sent us a term sheet four hours later, including the assets and everything. I sent it to the group chat. Adam responded, “Take it.”

The deal was for the entire LLC, meaning everything: the app, the App Store listing, the source code, the databases, the Stripe and Plaid accounts, the bank accounts, the Figma, the landing page, and a dozen Mindie domains.8 We were paid in two installments, most of it within 48 hours of signing. We added in 20 hours of support, redeemable whenever, and a two-year non-compete. Her wire hit the company bank account two days after we signed, and Adam split it three ways.

I was very excited, but I remember feeling like I kind of wanted to keep it. It was too late, though. We’d already signed.

The aftermath

Afterwards, we kept getting payout emails, more Stripe emails every morning. The pink bars in the chart show that, but the money was no longer ours to keep.

The second installment took a while and had some returned wires. We had to try many different payout methods. Adam was still processing the payments by hand, and we never built a feature to send them automatically. He recorded a Loom on how to run them eventually. That was the last comment in the thread.

In the purchase agreement, we had a disclosure section which listed the first risk as the payment processor shutting us down, and less than five months after the sale, Stripe did. Chargebacks.

We recently identified payments on your Stripe account for Monetize Your Stories, LLC that don’t appear to have been authorized by the customer, meaning that the owner of the card or bank account didn’t consent to these payments. As a precautionary measure, we will no longer be able to accept payments.

That email still came to me, I guess, because nobody changed the contacts. The app is now off the App Store, and mindie.so, our domain, doesn’t even resolve. The IRS kept sending us notices for several years.

There’s a French app out now that does exactly what Mindie did. Nick heard it does seven figures a month, and I believe him. The idea was good. We were new to a space and executed beautifully, but eventually the problems just mounted.

But still, for about a year, people would post photos onto their stories, and strangers would pay money to see them. The money would then go to the creator’s bank account without anyone ever leaving the Instagram app. We built that, and then we sold it, which is a very cool thing to be able to say.

Footnotes

  1. The legal entity was Monetize Your Stories LLC, incorporated through Stripe Atlas in June. We sold it the following February.

  2. From the app’s FAQ: “Mindie is an app to help creators monetize their Instagram Stories.”

  3. Fifty cents, from the networking code, if(price < 50), with the price in cents. Some creators wanted to charge less, but the economics of payment processing wouldn’t work out.

  4. The API parameter for how much to hide the photo is called blurRadius. The creator would decide with a slider eventually.

  5. From the FAQ: “Creators will earn the full amount of each sale they make on Mindie.” The buyer paid a flat fee on top of that, and the blurred image showed the full price, including the fee. We changed our fee often to try to figure out the optimal price.

  6. For anyone curious, from Model.swift: instagram-stories://share?source_application=…. The blurred image was passed as com.instagram.sharedSticker.backgroundImage. That’s how you build an app “inside Instagram.”

  7. The day prior, I got a notification that my access to the payments account had been revoked. His response in the group chat: “that must have been a mistake. I’ll look into it when I’m back at the computer later.”

  8. The agreement was very specific about the assets included: “Framer for Company Landing Page.” It also listed what could go wrong under “Disclosures/Known Risks.” The first item says, “The risk exists that payment processing accounts associated with the Company (e.g., Stripe, Plaid) could face bans, suspensions, or limitations.”