Underpriced AI

AI pricing tool for resellers

Visit Website
April 17, 2026 Google quietly stopped indexing my blog posts. Here's how I diagnosed it and what I did about it.

I've been publishing reseller content on my SaaS (Underpriced AI) and assumed Google was indexing everything. I was wrong.

Pulled the GSC coverage report this week. 124 posts published. 15 indexed. 59 stuck in "Crawled — currently not indexed." That's Google's polite way of saying "I read this and decided it wasn't worth my index space."

Digging into the patterns:

- 123 of 124 posts had no featured image. Massive Helpful Content signal I was failing.

- Three posts had 100+ em-dashes between them. Classic AI-writing tell.

- Seven posts shared publish dates (legacy from an MDX → DB migration).

Spent a Friday afternoon fixing:

1. Deduped publish timestamps (7 minutes in a script)

2. Stripped em-dashes and "leverage"/"robust" from the worst-offender posts

3. Backfilled images via Pexels + Unsplash APIs for all 123 posts. ~$0 cost, 2 minutes per post

4. Clicked "Validate fix" in Search Console to force a re-crawl

The lesson I'm still learning: Google's Helpful Content era makes quality signals dominant. Timing spreads, images, voice — all of it adds up. An "AI blog farm" (even a modestly-sized one) gets filtered out reliably now.

Will report back in 2 weeks on whether this actually moved the needle.

Building solo at underpricedai.com.

Comment

April 3, 2026 My Dashboard Was Lying About Churn, Revenue, and Lifetime — Here's What I Found

Hey IH! Week 5 update on Underpriced AI — the AI pricing tool for resellers.

The Short Version

Spent the week making my admin dashboard trustworthy. Found 6+ data integrity issues across churn, timezone handling, revenue tracking, and lifetime calculations. Also removed scan expiration after a user email exposed it as a bad policy.

What Was Wrong

Churn was 4x overstated

Dashboard showed 4 churns / $141 lost MRR. Real number: 1 churn / $9. The query was counting:

  • Trial cancellations (never paid)

  • Refunded users (complained about no 30-day trial)

  • Banned accounts

Fix: aligned dashboard with the forecasts page — both now exclude trials (stripeTrialEnd: null), non-subscribers (subscribedAt: not null), and banned users.

Every date was wrong

All SQL DATE() calls used UTC. PostgreSQL stores Prisma timestamps as timestamp without time zone. A single AT TIME ZONE 'America/Los_Angeles' tells PG "this value IS in LA time" — the opposite of what I wanted. Needed double conversion: AT TIME ZONE 'UTC' AT TIME ZONE 'America/Los_Angeles'.

Then the frontend had its own bug: new Date("2026-04-03") parses as UTC midnight, and toLocaleDateString({timeZone: "America/Los_Angeles"}) shifts it back to April 2nd. Fixed by appending T12:00:00 before formatting.

3 separate timezone bugs, each causing off-by-one errors in different directions.

Customer lifetime was absurd

Showing 37 months for a 4-month-old product. Formula was 1 / monthly_churn_rate which is theoretically correct but unproven. Capped at actual product age — you earn credibility as retention is demonstrated.

What I Built

Revenue intelligence. Stripe Revenue card now shows 3 metrics: Collected (90 days), Past Due (failed payment count + amount), Expected/Month (MRR from active subs, yearly normalized).

MRR Movement fix. Day selector had two bugs: shared state with the activity chart (clicking 7D on MRR reloaded the whole page), and churned MRR always used calendar month regardless of selection. Now independent state + consistent time window for both new and churned MRR.

Growth Drivers on forecasts. Integrated Google Analytics 4 directly. Shows monthly organic/direct/referral/social sessions with stacked bars, month-pace extrapolation, organic share %, and MoM growth. Organic search: 2 sessions (Jan) → 41 (Feb) → 1,303 (Mar) → pacing 1,620 (Apr).

Info tooltips. New MetricTip component (Radix portal tooltip) on every metric across dashboard and forecasts. Hover to see what it means. Sounds small but I was forgetting my own metric definitions.

Scan packs in activity chart. The Activity Overview now tracks scan pack purchases alongside signups, items, scans, and subscriptions.

Scans activity fix. "Scans" line was querying ItemAnalysis (saved items only) instead of QuickScan (all scans). Was mirroring the Items line exactly.

The Scan Expiration Story

User emailed: "I saved my scans knowing I'd come back to list them. Now they're expired and gone."

Scans expired after 24 hours. To get them back, he'd have to re-scan — burning credits he already paid for. That's punishing users for not working fast enough.

Removed expiration entirely. Scans persist forever. Storage cost is negligible ($0.10/mo S3 + $0.81/mo DB). Credited him 7 scans, sent a personal email.

Dependency cleanup

  • Removed canvas and @napi-rs/canvas (neither was imported anywhere — dead weight)

  • Upgraded otplib v12 → v13 (eliminated 3 deprecation warnings, had to migrate 2FA API: authenticator.verify()verifySync().valid)

  • 4 fewer npm deprecation warnings on deploy

Numbers (Week 5)

  • $589 MRR / $7.1K ARR

  • 36 paying subscribers, 842 total users

  • 66% gross margin, 2.7% monthly churn

  • Organic search: 1,303 sessions in March, #1 acquisition channel

  • SEO blog content driving high-intent traffic (antique identifier apps, thrift store apps, worthpoint alternatives)

  • 19 commits this week

Questions for IH

  1. How do you handle timezone in your dashboards? The PostgreSQL timestamp without time zone + AT TIME ZONE gotcha cost me half a day. Curious if others have cleaner patterns.

  2. Do you expire user-generated content? I removed scan expiration but wondering if there's a middle ground at scale (millions of records).


Building in public at underpricedai.com

1 Comment

  1. 1

    Nice work on this launch 👏

    The product feels practical and user-focused.

    We work with apps, tools, and web products to improve reach and user acquisition through real creator campaigns 🚀

    Open to connect.

March 26, 2026 211 Commits, 0 New Features — The Week That Actually Mattered

Hey IH! Week 4 update on Underpriced AI — the AI pricing tool for resellers.

Quick Recap

Last week I shared that a customer complaint led me to discover our AI costs were 10x what we thought ($0.52/scan, not $0.05). That forced a full audit of the billing code, which turned into a full audit of... everything.

211 commits later, here's the honest breakdown:

  • ~40% was mobile bug fixes (overflow, layout, safe areas)

  • ~20% was anti-fraud and email verification

  • ~15% was admin tooling (partnership CRM, forecasts, analytics)

  • ~15% was cost optimization and pricing changes

  • ~10% was actual user-facing features

The biggest impact came from the boring 40%.

The Mobile Wake-Up Call

I'd been testing on my iPhone and a Pixel. Things looked fine. Then I started checking on Samsung Galaxy A-series phones (the most popular Android phones worldwide) and found the app was borderline unusable:

  • Item titles running off cards

  • Descriptions pushing the page sideways

  • Bottom nav bar covering buttons

  • Stats cards breaking on narrow screens

20+ commits of overflow fixes, safe area insets, and responsive adjustments. Zero of these were reported by users. Users don't report layout bugs — they just churn.

Lesson: If your target market includes people who sell $20 items from thrift stores, they're not using $1,000 phones. Test on cheap devices.

Free Tier Abuse Was Real

Found users creating 3-4 accounts with different email addresses to get unlimited free scans. Same IP, same device fingerprint.

Built an anti-fraud system:

  • Email verification required before scanning

  • IP-based duplicate detection with confidence scoring

  • Soft-ban system with self-service recovery

  • 50+ disposable email domain blocklist

  • Merge tool for legitimate duplicate accounts (Google vs email signup)

This was a full week of work that generates zero new revenue. But it stops the bleeding on free-tier costs.

Features That Actually Shipped

Auto-save photos to device. When users scan an item, the photo now downloads to their phone automatically. Sounds obvious, but before this, photos were only saved to our servers. Users had to retake the photo when listing on eBay/Poshmark. Small fix, big workflow improvement.

Status-tiered inventory sorting. Items now sort: Analyzed (needs action) → Listed (actively selling) → Sold (completed) → Archived. Before, everything was mixed together sorted by date. Now your "to-do" items are always at the top.

"Death Pile" rename. Renamed "List Next" to "Death Pile" — that's what resellers actually call their unsorted inventory. Know your audience's language.

CSV export for inventory. Users can export their full item inventory (not just scans) as CSV for spreadsheet tracking.

Partnership outreach CRM. Built an admin tool to discover estate sale companies via AI, enrich them with contact info, and send outreach emails. This is my B2B acquisition channel — estate sale companies recommend our app to their customers.

Cost Optimization (following up on last week's $0.52/scan discovery)

  • Trimmed Claude system prompt 21% (4,200 → 3,300 tokens)

  • Reduced web searches from 3 → 1 when users provide hints

  • Skip Perplexity enrichment on re-scans (item already identified)

  • Fixed credit-pack-only users getting 30 free subscription scans

  • Per-scan cost tracking now captures full token breakdown (input + output + cache)

  • Raised credit pack prices so subscriptions are always cheaper per-scan

  • Removed the 1-scan pack (negative margin after Stripe's $0.30 fixed fee)

Result: Cost per scan trending ~30-40% lower than the $0.52 we discovered last week.

Pricing Changes

Did a full pricing overhaul:

  • Repositioned credit packs as premium (always more expensive per-scan than subscriptions)

  • Removed the 1-scan pack entirely — after Stripe's $0.30 fixed fee, I was losing money

  • Added lifetime scan counter per user for analytics

What's Next

Acquisition is still the bottleneck. The product is solid, mobile works properly now, fraud is under control. Focusing on:

  • Partnership outreach to estate sale and auction companies

  • Content marketing (SEO blog posts, building in public)

  • Potentially short-form video showing the scan-to-sell workflow

Questions for IH

  1. Anyone dealt with free-tier abuse at scale? My confidence-scored IP grouping works, but I'm curious what others have tried.

  2. What's your best B2B cold outreach channel? Email? LinkedIn? Something else?


Building in public at underpricedai.com

Comment

February 13, 2026 Week in review: Firefox extension, pricing accuracy overhaul, and dealing with a trademark conflict

Big shipping week on Underpriced AI (AI-powered resale valuations from photos). Here's everything that went out:

🔧 What shipped

Firefox extension – Ported the Chrome extension to Firefox MV3. Took about a day. The main gotchas: Firefox doesn't support MAIN world script injection, web_accessible_resources needs a slightly different manifest format, and they now require a data_collection_permissions field. Published on AMO: https://addons.mozilla.org/en-US/firefox/addon/underpriced-ai/

Pricing accuracy overhaul – This was the meatiest work. Integrated real eBay sold data via the Finding API, added IQR outlier removal so one $5,000 sale doesn't skew a $50 item, condition-matched pricing, and recency-weighted blending of sold vs. active listings. Users can now see actual sold listing cards alongside the AI estimate.

Cross-platform fee calculator – Shows net profit after fees on eBay, Poshmark, Mercari, Facebook Marketplace, and Etsy. Small feature, big impact — resellers always want to know "what do I actually pocket?"

Reddit engine – Built a daily digest cron that surfaces reselling subreddit activity. Early experiment in community-driven growth.

Chrome extension upgrades – Added hint forms (enter brand/item type before scanning for better accuracy), inline result overlays with refine and save-as-image, and fixed Reddit image scanning.

⚖️ The trademark situation

Something I didn't anticipate: another company operates in the reselling space under "Underpriced." I discovered this after I'd already built the product, registered the domain, published to the App Store, and started getting users.

Options were:

1. Rebrand everything (painful, expensive, lose SEO)

2. Add a clear disclaimer and keep building

I went with option 2. Added "Underpriced AI is independently developed and is not affiliated with other services using the name 'Underpriced'" to the website footer, app store listings, and the new Firefox Add-on. It's not glamorous, but it's the pragmatic choice for a solo founder.

Has anyone else run into this? How did you handle it?

📊 By the numbers

- 54 commits this week

- 3 platforms (web, Chrome, Firefox)

- iOS app live, Android coming soon

What's next: Continuing to improve pricing accuracy with more data sources, and working on the Android app.

https://underpricedai.com

#buildinginpublic #indiehackers #solofounder #ai #saas #reselling #browserextension #firefox #chrome #shipping #trademark #weekinreview

Comment

February 6, 2026 How I'm Tracking the Metrics That Actually Matter (and the Ones I Was Ignoring)

Hey IH! Back with another update on Underpriced AI - the AI-powered valuation tool for resellers.

This Week's Theme: You Can't Improve What You Don't Measure

I had analytics "set up" for weeks. Google Analytics was installed, page views were flowing, I could see traffic numbers. But I realized I was measuring vanity metrics and completely blind to the ones that matter.

What I was tracking: Page views, sessions, bounce rate What I should have been tracking: Where users drop off between signup and first purchase

What I Shipped

1. Full Conversion Funnel Analytics

Wired up every step of the user journey:

  • sign_upview_pricingbegin_checkoutpurchase

  • trial_conversion - specifically when a free trial user becomes paid

  • feature_interest - which locked features make users want to upgrade

The feature_interest one is already eye-opening. When users hit their scan limit, I track that moment. When they click "Upgrade" from the settings page, I track which features they don't have access to. This tells me which features actually drive revenue.

2. Usage Banner on Dashboard

Users had no idea how many scans they had left until they hit zero. Now there's a persistent banner:

  • Trial users: "2 of 3 free scans remaining" (amber)

  • Paid users: "32 of 45 scans used this month" (neutral)

  • Low credits: Amber warning + "Buy More" CTA

Simple change, but it primes users for the upgrade decision before they hit the wall.

3. User-Submitted Reviews

Users can now leave reviews directly on the site. Reviews go through admin approval before going public. I can also respond to reviews inline - useful for addressing feedback publicly.

This is partly social proof, partly a feedback channel. The reviews page now has testimonials + user ratings + a submission form all in one place.

4. iOS App Store Rating Prompt

Added a "Rate Us" button in settings. On iOS, it deep-links to the App Store review page. On web, it links to our reviews page. Small thing, but App Store ratings compound over time.

The tricky part: Apple's native requestReview() API is unreliable - Apple throttles it silently and returns success even when the dialog doesn't show. And window.open() is blocked in Capacitor WebView. Solution was using the itms-apps:// URL scheme with window.location.href.

The Numbers

  • Switched from Claude Opus to Sonnet for all analysis (cost savings without noticeable quality drop)

  • Added broader eBay fallback searches for items with low confidence scores

  • 5 new SEO blog posts published

Lesson Learned

GA4 events sent from code appear automatically in the dashboard - you don't need to manually create them in the UI. I spent 30 minutes trying to create events in the GA interface before realizing the "Create with code" option literally just means "go implement it and we'll pick it up automatically."

The only thing you actually need to do in GA4 admin: mark your important events as "key events" and register custom dimensions for user properties. Everything else is automatic.

Questions

  1. How do you decide which events are "key events" vs just engagement tracking? I landed on: if it directly relates to revenue (signup, purchase, trial conversion), it's a key event. Everything else is engagement.

  2. Anyone running a hybrid web + iOS app with Capacitor? The platform detection and deep linking quirks are nontrivial. Would love to compare notes.


Building in public at underpricedai.com

Comment

January 3, 2026 I built an AI pricing app for my thrifting wife

Hey IH! 👋

My wife runs a reselling business – thrift stores, estate sales, flea markets. She's good at finding stuff, but was spending hours every night researching prices on eBay before listing.

So I built her an app to get that time back.

## What it does

📸 Snap a photo of any item

🤖 AI identifies it (brand, model, era, maker)

💰 Pulls recent sold prices from eBay

📝 Generates optimized listings you can publish directly

## The "Quick Scan" feature

This is the killer use case – you're at a thrift store, see something interesting, snap a photo, and get a price in seconds. Buy with confidence, skip the duds.

## Tech stack

- Next.js (frontend + API)

- Claude API for vision and analysis

- eBay API for real market data

- Vercel for hosting

## Current status

- Launched a few weeks ago

- Building in public

- Free tier available (5 scans/month)

- Paid plans for serious resellers

## What I'd love feedback on

1. Pricing – is $9/mo for 50 scans reasonable?

2. What other marketplaces should I add? (Etsy is next)

3. Any resellers here? What features would make this a must-have?

Check it out: https://underpricedai.com

Happy to answer any questions about the build or the reselling niche!

7 Comments

  1. 2

    Isn't this just the copycat of Underpriced .App?

    1. 1

      We are Underpriced AI — built this from scratch and own the trademark. The app started from my wife's frustration reselling items and leaving money on the table. Been building it for months with Claude for vision/identification and eBay API integration for real-time market pricing. Not sure what you're referring to, but no copycat here.

  2. 1

    Congrats on the launch, looks solid. What channels are you experimenting with to get early users?

    1. 1

      Thanks! Channels so far:

      1. Reddit - r/flipping, r/ebay, r/thriftstorehauls. Resellers hang out there and are very engaged. Comment genuinely, don't spam.

      2. SEO (long game) - Just launched a blog targeting "how to price thrift store finds" type queries. Too early to see results but planting seeds.

      3. This community - IH and HN have been great for early feedback and a few signups.

      4. Word of mouth - Built a referral program (give 3 scans, get 3 scans). Resellers talk to each other at estate sales and flea markets.

      Biggest learning: timing matters. Resellers are weekend warriors - engagement spikes Fri-Sun. So I time emails and posts for Friday afternoon.

      What's worked for you?

      1. 1

        That’s a solid mix, especially with the community-first approach and the timing around Friday to Sunday. The insight about the weekend is smart and often overlooked.

        In similar niches, I’ve observed that discussion-style posts tend to perform well during those peak times. Topics like questions, pricing debates, and workflows often spark organic engagement and referrals over time, rather than direct promotion.

        As you continue to test different channels, are you planning to focus more on any specific one, or will you mainly let them run in parallel for now?

        1. 1

          Great point about discussion-style posts - that matches what I've seen too. The posts that ask genuine questions ("how do you price items?" or "what's your research process?") consistently outperform anything that feels like an announcement.

          For channel focus, I'm running them in parallel for now but tracking which ones actually drive signups vs just engagement. Earl signals:

          - Facebook reseller groups have the most direct conversions because the audience is already buying/selling daily. But group rules vary and reach is unpredictable.

          - Indie Hackers is great for feedback and connecting with other builders, but the audience isn't my end user.

          - LinkedIn drives the most "credibility" traffic - people who check out the site but don't necessarily sign up immediately.

          - Hacker News is feast or famine. One good post can drive more traffic than a month of everything else combined.

          My plan is to keep all four running for another 4-6 weeks, then double down on whichever channel has the best signup-to-paid ratio, not just traffic. A channel that sends 50 visitors who convert is worth more than one that sends 500 who bounce.

          The discussion-first approach you mentioned is definitely the move though. I'm shifting toward asking questions and sharing specific lessons rather than "hey check out my tool" posts. People engage with problems, not products.

          1. 1

            This is a mature perspective on early growth, particularly the emphasis on the sign-up-to-paid ratio rather than just focusing on raw traffic. Many teams overlook this and waste time chasing irrelevant noise.

            In reseller-style markets, I've noticed that Reddit and Facebook groups are most effective when treated less as "channels" and more as indicators of intent. The posts that lead to conversions aren't necessarily the ones with the highest upvotes; rather, they are those where users express uncertainty about pricing or anxiety about their decision in the comments.

            At this stage, it can be beneficial to narrow down Reddit discussions to a small set of repeatable formats, such as “Would you buy this at $X?”, “How would you compare this?”, or “What would make this a no-brainer purchase?”. Engaging consistently during the Friday to Sunday time frame that you mentioned helps build recognition and trust without needing promotional posts.

            If you're interested, I can assist you in creating a simple Reddit test plan, identifying which threads to prioritize, what to look for in comments that indicate buyer intent, and how to discreetly track which discussions lead to sign-ups. No pressure; I'm just happy to share what has worked for similar products.

About

My wife runs a reselling business – thrift stores, estate sales, flea markets. She's good at finding stuff, but was spending hours every night researching prices on eBay before listing. So I built her an app to get