selfhost.directory

The index of self-hostable projects — ranked, categorized and served with live updates.
Own your data and stop giving it to big tech.

PriceBuddy logo

Self-host PriceBuddy

v1.0.57

Price tracker that watches any online store

ReleaseSource AvailableGPL-3.0
Docker ComposeCompose file & guide
docker compose up -d
Updated8 hours ago
LanguagePHP
Setup difficultyEasy
MobileResponsive
ThemeDark mode
Stars
1 452
Port
8080 (web app UI, served by the app container on port 80)
Docker
jez500/pricebuddy
Dashboard with tracked products grouped by tagProduct overview page with price and listingsPrice history chart for a tracked product

What is PriceBuddy?

Should you self-host PriceBuddy?

PriceBuddy scores 55/100 on selfhost.directory (how scoring works). It has 1 452 GitHub stars.

It shipped 10 stable releases in the past year. The latest, v1.0.57, came out on 24 October 2026. New versions land roughly every 6 days.

Setup is easy: most people get it running in one sitting. An official Docker image is available. It is GPL-3.0-licensed and written mostly in PHP.

Features

  • AI-assisted scraping (optional)Disabled by default, requires configuring a provider
  • Availability and back-in-stock alerts
  • Browser extension companionSeparate companion extension
  • CLI with MCP supportCompanion CLI tool
  • Deal notifications
  • Headless-browser scraping for JS sites
  • Multi-store price comparison
  • Multi-user accounts with roles
  • Price history and charts
  • Price tracking for arbitrary stores
  • REST API
  • Scheduled and per-product price checks
  • Tags and customisable dashboard
  • Unit price comparison

PriceBuddy README

How to install PriceBuddy

Install PriceBuddy with Docker Compose

All you need is [Docker](https://www.docker.com/).
Environment variables
DB_HOST, DB_USERNAME, DB_PASSWORD, DB_DATABASE, APP_USER_EMAIL, APP_USER_PASSWORD, SCRAPER_BASE_URL, AFFILIATE_ENABLED
mkdir pricebuddy
cd pricebuddy
wget https://raw.githubusercontent.com/jez500/pricebuddy/main/docker-compose.yml
touch .env
docker compose up -d

Recommended install path; with defaults the app runs at http://localhost:8080 and the image includes the scheduler for background price checks.

How to configure PriceBuddy

  • AFFILIATE_ENABLEDWhether PriceBuddy appends its affiliate codes to supported store URLs

    Whether PriceBuddy appends its affiliate codes to supported store URLs

    values: true / false

  • APP_DEBUGEnable Laravel debug output when troubleshooting the install

    Enable Laravel debug output when troubleshooting the install

    values: true / false

  • APP_ENVLaravel environment, e.g. local when debugging an install

    Laravel environment, e.g. local when debugging an install

  • APP_KEYLaravel application key; see the Laravel .env.example for further possible variables

    Laravel application key; see the Laravel .env.example for further possible variables

  • APP_URLSet to the correct URL when running behind a reverse proxy so assets load

    Set to the correct URL when running behind a reverse proxy so assets load

  • APP_USER_EMAILEmail for the initial Admin user, only used for seeding the database

    Email for the initial Admin user, only used for seeding the database

  • APP_USER_PASSWORDPassword for the initial user, only used for seeding the database

    Password for the initial user, only used for seeding the database

  • ASSET_URLAsset base URL for reverse-proxy setups

    Asset base URL for reverse-proxy setups

  • DB_DATABASEpricebuddyDatabase name, matching MYSQL_DATABASE in the database service

    Database name, matching MYSQL_DATABASE in the database service

  • DB_HOSTdatabaseName of the database service

    Name of the database service

  • DB_PASSWORDDatabase password, matching MYSQL_PASSWORD in the database service

    Database password, matching MYSQL_PASSWORD in the database service

  • DB_USERNAMEpricebuddyDatabase user, matching MYSQL_USER in the database service

    Database user, matching MYSQL_USER in the database service

  • SCRAPER_BASE_URLhttp://scraper:3000URL of the scraper service

    URL of the scraper service

  • SESSION_SECURE_COOKIESet to true for HTTPS-only setups behind an SSL-terminating proxy

    Set to true for HTTPS-only setups behind an SSL-terminating proxy

    values: true / false

  • TRUSTED_PROXIES*Proxies whose forwarded headers are trusted; default trusts all

    Proxies whose forwarded headers are trusted; default trusts all

    values: comma-separated proxy IPs

  • URL_MATCHING_TRACKING_PARAM_PREFIXES_EXTRAExtra prefixes of tracking parameters to ignore when normalising product URLs

    Extra prefixes of tracking parameters to ignore when normalising product URLs

  • URL_MATCHING_TRACKING_PARAMS_EXTRAExtra tracking query parameters to ignore when normalising product URLs

    Extra tracking query parameters to ignore when normalising product URLs

PriceBuddy releases & version history

FAQ

Products are not displaying on the dashboard?

The dashboard only lists favourite products, so tick the Favourite checkbox on the products you want to see.

The image is not displaying on the dashboard — what can I do?

Images are captured during the first scrape, so a missing image usually has the same cause as a missing price; you can set the image manually by editing the product and adding its URL.

Can PriceBuddy track stores that require login to see prices?

No, that is not currently supported; a workaround using the browser scraper with custom scripts exists but is very untested.

Can PriceBuddy scrape stores that use JavaScript to render the page?

Yes, switch the store to the browser-based scraper; it is slower and more resource intensive but its timeouts and sleep settings are configurable and custom JavaScript can be mounted in the scraper container.

What if a store is blocking PriceBuddy?

PriceBuddy tries to behave like a real browser user (rotating user agents, waiting between requests), but some stores block aggressively, so check in a browser whether you are blocked yourself.

Why do I get the incorrect price when scraping a store?

Usually the store's scraping strategy (often guessed when a store is auto-created), a website change by the store, or wrong locale/currency settings; edit the store and adjust the strategy until the expected price is returned.

Rate this project

Click to rate — no account needed.

0 comments

Posting as guest
Loading comments…