I built a freemium SaaS on WordPress in 4 months — here's what I learned
Today I'm launching QR Studio Vault (https://qrstudiovault.com), a freemium QR code generator. It's my first SaaS, built solo, on WordPress. Here's the full story.
Why WordPress?
When I told other developers I was building SaaS on WordPress, I got laughed at. "Use Next.js." "Use Laravel." "WordPress is for blogs."
Here's why I chose it anyway:
- I'm solo. Speed matters more than prestige.
- Paid Memberships Pro handles subscriptions, access control, drip content — $0 upfront.
- WordPress has 50,000+ plugins. Almost anything I needed already existed.
- Hosting is cheap (~$10/mo vs $50+ for Vercel + database).
- SEO is battle-tested.
The stack:
- CMS/Framework: WordPress 6.x
- Membership/subscriptions: Paid Memberships Pro (free core)
- Payment gateway: PayPal (more on this below)
- QR generation: Custom engine built on top of qrcode.js with SVG rendering
- Caching: [your cache plugin]
- Email: WordPress + SMTP plugin
- Hosting: [your host] with SSL
The 9 QR code types
I built support for:
- URL (standard)
- WiFi (auto-connects)
- vCard (contact info)
- Email (prefilled)
- SMS (prefilled text)
- Phone (auto-dial)
- Plain text
- Location (opens maps)
- Event (adds to calendar)
The SVG rendering for vCard was the hardest — encoding contact data creates very dense QR codes that needed optimized rendering.
The Stripe disaster
I set up Stripe in live mode, tested it, everything worked. 24 hours before launch, Stripe banned my account with zero explanation. No appeal. No specifics. Just "not a fit for our platform."
Scrambled to set up PayPal. Took 2 days of debugging webhook issues:
- PMPro auto-registered a webhook that didn't actually exist in PayPal
- I ended up with 3 stale webhooks with wrong URLs
- Users were being created but not assigned memberships
Lesson: always have a backup payment gateway ready BEFORE launch.
The PayPal webhook fix
For anyone doing PMPro + PayPal:
- Log into PayPal Developer Dashboard
- Delete ALL existing webhooks
- In WordPress, clear Client ID + Secret → Save
- Paste credentials back → Save (forces fresh registration)
- Verify webhook URL is:
https://yourdomain.com/wp-json/pmpro-paypal/v1/webhook - Subscribe to ALL events (or minimum: PAYMENT.SALE.COMPLETED, BILLING.SUBSCRIPTION.ACTIVATED)
Pricing strategy
- Free: 5 codes/month
- Starter: $9.99/mo (50 codes)
- Pro: $19.99/mo (500 codes + SVG)
- Business: $49.99/mo (unlimited + API)
Competitors charge $30-50/mo for basic SVG exports. My Pro plan is deliberately underpriced to win the "I just need a nice QR code with my brand colors" market.
Mistakes I made
- Scope creep. Cut 4 features last minute to ship.
- No email list. I have no one to tell about my launch.
- No warm audience. Building in public would've helped.
- Underestimated payments. Payment setup took 30% of my build time.
- No marketing prep. Should've written launch posts weeks in advance.
What went right
- WordPress speed. I shipped in 4 months what would've taken 8 in Next.js.
- Real free tier. No dark patterns.
- Fair pricing. Customers tell me it's refreshing.
- SEO foundation. WordPress + Yoast gave me a head start.
What's next
- [ ] Add Stripe via a different business structure
- [ ] Build Zapier integration
- [ ] Launch API docs site
- [ ] SEO content push (10 articles in 30 days)
Try it
If you use QR codes, try the free tier — no credit card:
👉 https://qrstudiovault.com
Would love feedback from this community especially on the API design.
Building solo, launching scared, doing it anyway. 💪
— Diego
Top comments (0)