Project · Mobile App

Smart Price Tracker: a mobile app built on Bubble.io and n8n

Smart Price Tracker is our own mobile app for iOS and Android. It tracks price history so shoppers can tell a real discount from a staged one. Bubble.io runs everything the user touches. A self-hosted n8n instance on a dedicated Hetzner server does the heavy scraping and triggers a push alert when a price drops below the target.

Stack
Bubble.io (app & core logic), n8n (data automation), Hetzner (server)
Type
Mobile app, iOS & Android
Domain
E-commerce, smart shopping
← All projects

What does it do?

Online shops love a fake discount: raise the price for a few weeks, then "cut" it back to where it was. Without price history, a shopper can't tell the difference.

Smart Price Tracker fixes that. You follow a product, the app keeps its price history, and you get a push notification the moment the price drops below the target. The goal is simple: protect shoppers from fake promotions and catch the real ones.

We built it as our own product, so every architecture decision on this page is one we live with ourselves.

How is the architecture split?

The app uses a hybrid architecture. It combines the development speed of no-code with the power of self-hosted automation. Each part does the job it's best at:

  • Bubble.io: everything the user touches. The UI and UX, user accounts, the main database structure and the core app logic all live in Bubble, with a design built strictly for mobile.
  • n8n on Hetzner: the heavy lifting. A self-hosted n8n instance on a dedicated Hetzner server runs the constant scraping and price updates, processes the large volume of data from online stores, and syncs the results into Bubble's database through webhooks.
The Smart Price Tracker mobile app for iOS and Android runs on Bubble.io, which holds the UI, accounts, main database and core logic. A self-hosted n8n instance on a dedicated Hetzner server scrapes online stores, tracks price history, checks target prices and syncs results into Bubble through webhooks. When a price falls below the target, a push notification reaches the phone.Price trackeriOS & Androidprice history+ alertsBubble.ioUI / UX for mobileuser accountsmain databasecore app logicscreensdataDedicated server · Hetznern8n (self-hosted)scheduled scraping runsprice updates + historytarget-price checkssync to Bubble via webhookswebhooksOnline storesproduct pages & pricesscrapeprice below target → push notificationBubble.ion8n automationPrice alertExternal data
Figure 1. Bubble.io holds the app and its data; n8n on a dedicated Hetzner server collects prices from online stores and pushes results into Bubble through webhooks.
LayerRuns onHandlesWhy there
App & core logicBubble.ioUI, accounts, main database, business rulesFast to build and change, one place for app logic
Data enginen8n, self-hosted on HetznerScraping, price updates, history, target checksHeavy, repetitive work stays off the app
BridgeWebhooksSending new prices and history into BubbleBubble only receives clean results

Why not run the scraping inside Bubble?

Technically, Bubble could do it. It can call external services and run scheduled backend workflows. But price tracking means checking many products, again and again, all day. That work never stops.

Inside Bubble, that constant load would compete with the app itself. It would add to workload-unit consumption and make the app slower for the people using it. Moving the grind to n8n on a dedicated server keeps the two apart. The scraping engine works as hard as it needs to, and the app stays responsive.

Rule of thumb: keep Bubble.io for what users touch. Move repetitive, high-volume data work to a self-hosted n8n, and send Bubble only the results.

How do price-drop alerts work?

The alert system is a chain of automated workflows. On a schedule, n8n scrapes the tracked products, updates prices and history in Bubble, and checks each price against its target. When a price falls below the target, the workflow triggers a push notification straight to the user's phone.

On a schedule, n8n scrapes the tracked products in online stores, syncs new prices and history into Bubble via webhooks, and compares them with each user's target price. If a price is below the target, a push notification is sent; otherwise the workflow waits for the next run.1 · Scheduled runn8n starts ascraping cycle2 · Scrape pricestracked productsin online stores3 · Sync to Bubblenew prices andhistory, via webhook4 · Below target?compare with eachuser's target price5 · Push alertnotification onthe user's phoneyesno → nothing to send, wait for the next run
Figure 2. One cycle of the alert workflow. Most runs end at step 4 with nothing to send; a price below the target triggers a push notification.

What did publishing to the App Store and Google Play take?

Turning a no-code build into a native app in both stores is a project of its own. We handled the whole path, including the requirements that most often hold up a review:

  • Media permissions configured and explained the way each store expects.
  • Privacy policies that match what the app actually does with data.
  • Test accounts so reviewers can log in and see the full app.

None of this is hard. It's just unforgiving: a reviewer who can't log in, or a permission without a clear reason, means another round of review.

What came out of it?

A robust product. Because the complex scraping runs in n8n on Hetzner, the Bubble.io app stays fast and smooth for users, while the data engine does the heavy work on its own server.

It's also our clearest proof that a no-code stack doesn't have to stop at no-code. Bubble.io for the product, n8n for the heavy automation, and the same pattern scales to business-grade apps.

When does this stack make sense for your app?

It fits when:

  • Your app depends on outside data that changes often: prices, stock levels, listings, rates
  • Background jobs are heavy or frequent enough to slow the app down
  • You want Bubble.io's development speed for the product itself
  • You prefer to keep data processing on a server you control

Skip it when:

  • The data changes rarely. Bubble's own scheduled workflows are enough.
  • Nobody will look after a server. Then use managed hosting, or let someone maintain it for you.

We build the app side as Bubble.io development and the data side as n8n automation, and we can host and maintain the n8n server after launch. If your app needs live data from the outside world, tell us what you're building.

Frequently asked questions

Can you build a mobile app with Bubble.io?

Yes. Bubble.io can power native mobile apps for iOS and Android, with the UI, user accounts, database and app logic built in Bubble. Publishing still takes work: each store reviews permissions, privacy policies and test access before an app goes live.

Why use n8n together with Bubble.io?

To keep heavy, repetitive background work out of the app. Jobs such as scraping, large imports or frequent data updates run in n8n, often self-hosted on a dedicated server, and only the results are sent to Bubble.io. The app stays fast and the background work can scale on its own.

How does n8n send data to a Bubble.io app?

Through webhooks. n8n calls a backend workflow that the Bubble.io app exposes as an API endpoint and passes the new data in the request. The backend workflow then creates or updates records in the Bubble database, so the app always shows current data.

What do the App Store and Google Play check when you publish a no-code app?

Mainly the same things as for any app: that each permission, such as access to photos or media, is configured and justified, that the privacy policy matches what the app does with data, and that reviewers can log in with a working test account to see the full app.

Need an app that keeps up with live data?

We build the product in Bubble.io and the heavy data work in n8n, so the app stays fast as it grows.

Book a Free Call →