Inspiration

Have you ever tried searching for a discount code on the web?

It’s a painful experience, and rarely works…

Well, it turns out there is an estimated $250 billion worth of discount codes out there.

Introducing promo.new

The discount code discovery app for the people — powered by AI.

promo.new finds promo codes for any product or brand you search for.

It aims to unlock 1% ($2.5 billion) of the global discount code value by 2026, and 4% ($10 billion) by 2027.

How to use it

It’s very simple:

  1. Go to promo.new
  2. Enter the product you want a discount for, and press “Enter”
  3. The app gives you a list of discount codes you can use

That’s it.

What it does

promo.new launches AI agents on-demand to search the web and scrape discount codes.

Believe it or not, the top discount code websites have people finding and verifying codes manually.

How I built it

The problem

Every website containing discount codes exposes the actual codes very differently. Take these 3 examples:

  1. Website A: has discount codes embedded inside an article or blog post.
  2. Website B: Lists all codes with a mask. E.g. SALE20F******
    1. Has a “Copy code” button that writes the full code to your clipboard
  3. Website C: List all the promotion titles, and requires you to click to “Reveal”
    1. On click, a popup opens. The original site redirects to the brand site — losing the current page context.
    2. The popup exposes the full code and displays a Copy code button as well

And the list goes on. There are too many variations in user experience, and building a scraper per UX category or website would not scale.

The solution

TLDR;

An AI agent with access to a real web browser — and the ability to do what humans can do: Search the web, navigate, click links, detect when a popup opens, close them, go back, etc…

And that’s exactly what promo.new does — on-demand.


So how does it actually find the codes?

When the agent launches the headless browser, it does two things:

  1. It takes a screenshot of what’s on the page
  2. It extracts the page’s HTML content

Then, it uses AI vision to analyze the screenshot, and text analysis for the HTML. Based on what it sees, the AI decides what action to take next: click a button, scroll down, navigate to a new page, fill out a form, or extract the discount codes it finds, both visually (screenshot), and in the source code (HTML).

Finally, it calls itself recursively until it finds codes or hits a timeout. Finally, it calls itself recursively until it finds codes or hits a timeout (get it?).

Anyways… every website is different — the agent figures out each site's unique structure and navigates it accordingly.

It handles popups, page redirects, and all the annoying UX patterns that would trip up traditional scrapers.


Want more details? Let’s break it down further…

The LLMWebAgent implements:

  1. Browser Control: Uses Playwright to launch a real browser context with bot detection avoidance (custom user agent, viewport, etc.)
  2. Vision + HTML Analysis: Takes screenshots and extracts HTML content, then sends both to an LLM (Gemini Flash) to understand the page state
  3. Action Planning: The LLM analyzes the visual and HTML content to decide the next action (NAVIGATE, CLICK, TYPE, SCROLL, WAIT, or COMPLETE)
  4. Execution Loop: Executes the planned action, captures new page state, and repeats until it finds discount codes or times out
  5. Code Extraction: When the agent finds discount codes, it returns structured data with code text, descriptions, and source information

The best part? It scales to handle thousands of different discount code websites without writing custom scrapers for each one.

All the discount codes are persisted in a database via Supabase for fast retrieval — as many people could search for the same products or brands.

Challenges I ran into

The “Time-to-First-Discount-Code” (TFDC) challenge

This has become one of my top KPIs. It’s important because if the app takes too long to start producing results, users would simply give up and leave the site.

Getting the Time-to-First-Discount-Code under 20 seconds was challenging. It involved:

  1. Streaming discount codes as soon as the agents find them vs. waiting for all agents to complete scanning
  2. Making the LLM Web Agent more accurate
    1. It extracts the CSS selector from the HTML, and the button X and Y coordinates from the screenshot. If one method fails, it proceeds with the other method.
  3. Using agent concurrency with “Max Concurrency” settings
    1. E.g. launching many agents in parallel while only allowing X agents to run at the same time. E.g. 10 total agents with 3 agents that can run at a time.

Accomplishments that I’m proud of

  1. The LLM Web Agent — I was skeptical that an LLM Web Agent with the ability to navigate a browser like a human would be feasible in the amount of time I had for this hackathon. It was actually my biggest risk.
  2. Search vetting — it would be very scary to fire an AI Web Agent to navigate the web and find information on any search input. You know people… luckily I managed to build search input vetting (with AI) and deny suspicious searches :)
  3. The domain — I just like it because it stays true to what the app does and the intention of the .new and .app TLDs. Plus, it’s short — it takes a significant amount of time finding a decent domain these days.
  4. This last one it’s silly, but for some reason I’m really proud of the dynamically generated Open Graph images. I have a feeling that SEO and link sharing are going to become a big part of the distribution of this app, so having a good website preview feels like a good idea.

promo.new analytics are public!

You can see all the website traffic data at:

https://plausible.io/promo.new

What I learned

I learned that simple ideas can take a ridiculous amount of execution.

Also:

  • Today is the best time to built anything — thanks to AI and Bolt.new
  • Your AI prompt is as good as your understanding and explanation of the problem you are trying to solve
  • Random: EventSource is a thing?!

Challenge compliance

This project qualifies for the following challenges:

  1. Startup Challenge
    1. The Supabase database powers promo.new
    2. Specific tips I got from the challenge and designed for:
      1. Remove Frictions — The app can be used by anyone. There are no barriers: no sign up, sign in, etc — just a simple search box.
      2. Time to Value — Refer to the “Time-to-First-Discount-Code” (TFDC) KPI mentioned above :)
  2. Custom Domain Challenge
    1. I used Entri to get an IONOS domain name and was able to quickly secure and link promonew.app to my Bolt project’s dev app
    2. The experience was very smooth — it took less than 10 minutes.
  3. Deploy Challenge
    1. I used Netlify to deploy my Bolt project to a dev environment I could reliably test on

Building with Bolt

This app was started and primarily built with Bolt! The headless browser portion was tested locally, as Bolt does not support running Chrome inside the Web Container.

Tips for anyone starting out with Bolt

  1. Enable the “Diff mode” experimental feature — this will ensure Bolt only apply code changes without rewriting the whole file! With this you’ll save time, and tokens.
  2. Use the “Discuss” mode and make sure the solution makes sense to you before asking Bolt to implement it. Ask Bolt follow-up questions and brainstorm together.
  3. When iterating on a feature, instead of asking Bolt to implement the change, ask to create a new version with the changes. This will allow you to easily switch back versions if the new changes don’t work.

My Bolt wishlist

  1. A mode that allows you to review and accept code changes in “Diff mode” before committing the code.
  2. An official and exposed process.env.BOLT environment variable that can be used inside the codebase to know if the code is running on Bolt or another environment. Netlify supports this via process.env.NETLIFY
  3. A way to safely add environment variables and sensitive secrets (just like in Stackblitz!)
  4. Full codebase awareness. It appears Bolt doesn't have the full repo in the context window - which lowers the consistency of the LLM-generated code. I know this is a hard problem to solve.

What's next for promo.new

1. Code verification agent

I plan to leverage the LLM Web Agent I built to do discount code verification using the same feedback loop we are using to find discounts. This new agent will verify the codes just like a human would:

  1. Navigate to the brand or product website
  2. Add items to the cart, proceed to the checkout page
  3. Enter and try out the discount codes

2. Brand email newsletter scrapper agent

  • Autonomously searches brands, subscribes to their email newsletters, and waits to receive email promotions from those brands

3. Discount code alerts

  • Enable alerts to be notified when promo.new discovers new promo codes for products and brands you are interested in

How will you make money?

We all know AI tokens add up… not to mention other cloud costs.

Sites like Honey (acquired by PayPal for $4 billion) and Rakuten generate hundreds of millions in revenue annually.

They make money primarily via affiliate marketing.

When users click through a coupon site and make a purchase, the site earns a percentage commission (typically 2-15% depending on the merchant and product category).

The fast track for promo.new to becoming a super-affiliate is by leveraging affiliate networks and aggregation platforms.

How affiliate networks work

  1. You apply once to join the network
  2. You can access hundreds or thousands of affiliate programs the network has access to
  3. You can manage all partnerships, links, and payments in one place

In our case, after joining an affiliate network, we would create an AI agent to scrape discount codes for all the merchants the network has access to.

Market size

The global digital coupons market size, valued at USD 8.96 billion in 2024, is expected to climb to USD 40.78 billion by 2033 at a CAGR of 18.33% during the forecast period from 2025 to 2033. This figure represents the market for digital coupon platforms and services, not the actual value of discounts provided.

Fun statistics

The scale of coupon usage is massive:

Built With

  • ai
  • bolt.new
  • browserless
  • gemini
  • nextjs
  • playwright
  • supabase
  • tavily
Share this project:

Updates