shopsavvy-mqtt
April 3, 2026 ยท View on GitHub
MQTT bridge for ShopSavvy price data. Publishes real-time product prices to MQTT topics, with optional Home Assistant auto-discovery support.
Features
- Connects to any MQTT broker (Mosquitto, HiveMQ, EMQX, etc.)
- Publishes to structured topics:
shopsavvy/products/{id}/price,/retailer,/availability, etc. - Full JSON payload on
shopsavvy/products/{id}/jsonfor detailed data - Configurable QoS, retain, and poll interval
- Home Assistant MQTT discovery support for automatic sensor creation
- Uses the official
@shopsavvy/sdk
Quick Start
# Install dependencies
bun install
# Set your API key (get one at https://shopsavvy.com/data)
export SHOPSAVVY_API_KEY=ss_live_your_key_here
# Configure MQTT and products
export MQTT_BROKER_URL=mqtt://localhost:1883
export PRODUCT_IDS="B09XS7JWHH,012345678901"
# Start the bridge
bun run start
MQTT Topics
For each monitored product, the bridge publishes to:
| Topic | Payload | Description |
|---|---|---|
shopsavvy/products/{id}/price | 79.99 | Lowest current price |
shopsavvy/products/{id}/currency | USD | Price currency |
shopsavvy/products/{id}/retailer | Amazon | Retailer with lowest price |
shopsavvy/products/{id}/availability | in_stock | Product availability |
shopsavvy/products/{id}/offer_count | 12 | Number of offers found |
shopsavvy/products/{id}/title | Product Name | Product title |
shopsavvy/products/{id}/url | https://... | Link to best offer |
shopsavvy/products/{id}/json | {...} | Full JSON payload |
shopsavvy/products/{id}/timestamp | 2026-01-15T12:00:00Z | Last update time |
shopsavvy/status | {...} | Bridge status summary |
Configuration
| Variable | Default | Description |
|---|---|---|
SHOPSAVVY_API_KEY | (required) | Your ShopSavvy API key |
MQTT_BROKER_URL | (required) | MQTT broker URL (e.g., mqtt://localhost:1883) |
PRODUCT_IDS | (required) | Comma-separated product identifiers |
MQTT_USERNAME | (none) | MQTT username |
MQTT_PASSWORD | (none) | MQTT password |
MQTT_CLIENT_ID | auto-generated | MQTT client identifier |
MQTT_TOPIC_PREFIX | shopsavvy | Topic prefix |
MQTT_QOS | 1 | MQTT QoS level (0, 1, or 2) |
MQTT_RETAIN | true | Retain messages on broker |
POLL_INTERVAL_SECONDS | 300 | Poll interval in seconds |
HA_DISCOVERY | false | Enable Home Assistant MQTT discovery |
HA_DISCOVERY_PREFIX | homeassistant | Home Assistant discovery topic prefix |
Home Assistant Integration
Enable automatic sensor discovery:
export HA_DISCOVERY=true
export HA_DISCOVERY_PREFIX=homeassistant
This publishes discovery configs so Home Assistant automatically creates sensor entities for each monitored product's price, retailer, and availability.
Docker
FROM oven/bun:1
WORKDIR /app
COPY package.json bun.lockb ./
RUN bun install --production
COPY src/ src/
ENV SHOPSAVVY_API_KEY=ss_live_your_key_here
ENV MQTT_BROKER_URL=mqtt://mosquitto:1883
ENV PRODUCT_IDS=B09XS7JWHH
CMD ["bun", "run", "src/bridge.ts"]
License
MIT