A powerful, robust Home Assistant integration for Pepper Deal Platforms (MyDealz, HotUKDeals, Chollometro, Dealabs, etc.). Monitor hot deals, track specific keywords, and receive fire-alerts directly on your smart home dashboard.
| π Features | π¦ Installation | βοΈ Configuration | π οΈ Options |
| π‘οΈ Anti-Ban Protections | π¨ Dashboard Examples | π§βπ» Development | π License |
-
π Zero Scraping: Connects directly to the Pepper internal GraphQL endpoints, avoiding fragile HTML DOM parsing.
-
π Multi-Platform Support: The integration supports the shared GraphQL core Pepper platforms. Below is the compatibility list:
Platform Domain Status Details / Reason MyDealz (Germany) mydealz.deβ Primary development platform. Tested & working. HotUKDeals (United Kingdom) hotukdeals.comβ Verified & working. Chollometro (Spain) chollometro.comβ Verified & working. Dealabs (France) dealabs.comβ Verified & working. Pepper.pl (Poland) pepper.plβ Verified & working. PreisjΓ€ger (Austria) preisjaeger.atβ Verified & working. Pepper.it (Italy) β Uses different CSRF/authentication stack. Pepper.ru (Russia) β Uses different cookie & session mechanisms. Pelando (Brazil) β Runs on a different non-GraphQL legacy engine. Desidime (India) β Runs on a different non-GraphQL legacy engine. Pepper.nl (Netherlands) β Platform shutdown (no valid DNS records). -
π Optional Authentication:
- Login optionally during setup to unlock personalized sensors.
- Keeps session cookies persistent across polls.
| Sensor | Entity ID | Description |
|---|---|---|
| π₯ Top Deals | sensor.pepper_top_deals |
State = title of the #1 deal. Attributes = full list of deals with all fields. |
| π Freebies | sensor.pepper_freebies |
State = title of the top freebie. Attributes = list of free items. |
| π Feed Deal Count | sensor.pepper_feed_deal_count |
Total deals currently in the retrieved feed. |
| π Freshest Deal | sensor.pepper_freshest_deal |
State = title of the most recently published deal. |
| Sensor | Entity ID | Description |
|---|---|---|
| π Keyword Alerts | sensor.pepper_keyword_alerts |
Count of deals matching your configured keywords. |
| π« Vouchers | sensor.pepper_vouchers |
Count of active vouchers with voucher_code in attributes. |
| π New Deals (Last Hour) | sensor.pepper_new_deals_last_hour |
Count of deals published within the last 60 minutes. |
| β Expired Deals | sensor.pepper_expired_deals |
Count of expired deals currently in the feed. |
| β Picked Deals | sensor.pepper_picked_deals |
Count of deals that have been featured/picked by editors (pickedAt > 0). |
| πͺ Top Merchant | sensor.pepper_top_merchant |
Merchant name with the most deals in the current feed. Attributes = full ranking. |
| π‘οΈ Average Temperature | sensor.pepper_average_temperature |
Average temperature of the retrieved deals. Attrs: min, max, median, std dev. |
| πͺ Cheapest Deal | sensor.pepper_cheapest_deal |
Price of the cheapest priced deal. |
| πΆοΈ Hottest Deal Temp | sensor.pepper_hottest_deal_temperature |
Temperature of the single hottest deal. |
| π Deal Distribution | sensor.pepper_deal_type_distribution |
Most common deal type (Deal/Voucher/Freebie/Discussion). Attrs: type counts. |
| π« Deals with Voucher | sensor.pepper_deals_with_voucher_count |
Count of deals in the main feed having a voucher code. |
| π Freebie Count | sensor.pepper_freebie_count |
Integer count of freebies. |
| π¬ Most Commented Deal | sensor.pepper_most_commented_deal |
Title of the deal with the most comments. |
| π Most Shared Deal | sensor.pepper_most_shared_deal |
Title of the deal with the most shares. |
| πΈ Best Saving (Absolute) | sensor.pepper_best_saving_absolute |
Highest absolute saving (next_best_price - price). |
| π·οΈ Best Saving (Percent) | sensor.pepper_best_saving_percent |
Highest percentage saving. |
| π Average Saving Percent | sensor.pepper_average_saving_percent |
Average saving percentage across all priced deals in the main feed. |
| πͺ Average Price | sensor.pepper_average_price |
Average price of priced deals in the current feed. |
| π¬ Discussion Count | sensor.pepper_discussion_count |
Count of discussion threads in the feed. |
| π« Voucher Count | sensor.pepper_voucher_count |
Count of voucher threads in the main feed. |
| π Expired Deals Percentage | sensor.pepper_expired_deals_percentage |
Percentage of expired deals in the feed. |
| π§βπ» Top Submitter | sensor.pepper_top_submitter |
Submitter name with the most deals in the current feed. |
| π Top Group | sensor.pepper_top_group |
Most frequent category/group in the feed. |
| πΆοΈ Hottest Deal Title | sensor.pepper_hottest_deal_title |
Title of the hottest deal in the feed. |
sensor.pepper_price_errors |
Count of active (non-expired) price error deals in the feed. |
| Sensor | Entity ID | Description |
|---|---|---|
| π User Thread Count | sensor.pepper_user_thread_count |
Total number of deal threads the logged-in user has posted. |
| π¬ User Comment Count | sensor.pepper_user_comment_count |
Total number of comments the logged-in user has posted. |
| π User Account Age (Days) | sensor.pepper_user_account_age_days |
Number of days since the user's account was created. |
| π User Badge Count | sensor.pepper_user_badge_count |
Number of badges earned by the user. |
| βοΈ User Email | sensor.pepper_user_email |
The email address associated with the logged-in account. |
| πΌοΈ User Avatar | sensor.pepper_user_avatar |
The user's avatar URL. |
All binary sensors are disabled by default.
| Sensor | Entity ID | Turns ON when... |
|---|---|---|
| π₯ High Temperature Alert | binary_sensor.pepper_high_temperature_alert |
Any deal in the feed exceeds the configured temperature threshold. |
| π Expired Keyword Deal | binary_sensor.pepper_expired_keyword_deal |
Any of your keyword-tracked deals has expired (is_expired=true or status β Activated). |
| π Freebie Available | binary_sensor.pepper_freebie_available |
Any freebies are currently in the feed. |
| π« Voucher Available | binary_sensor.pepper_voucher_available |
Any vouchers are currently in the feed. |
| π New Deal Available | binary_sensor.pepper_new_deal_available |
Any deals were published in the last 60 minutes. |
| β Expirable Deal Available | binary_sensor.pepper_expirable_deal_available |
Any active (non-expired) deal has an expiration date. |
| π Keyword Match Available | binary_sensor.pepper_keyword_match_available |
Any active (non-expired) deal matches the configured keywords. |
| πΆοΈ Super Hot Deal Available | binary_sensor.pepper_super_hot_deal_available |
Any deal temperature in the feed exceeds 500Β°. |
binary_sensor.pepper_price_error_available |
Any active (non-expired) price error deal is in the feed. |
Every deal object in sensor attributes includes the following fields:
| Field | Type | Description |
|---|---|---|
id |
string | Unique thread/deal ID |
title |
string | Deal title |
url |
string | Link to the deal page |
price |
float | Current deal price |
next_best_price |
float | Historical best price (for price comparison) |
temperature |
float | Community heat/vote score |
published_at |
int | Unix timestamp of publication |
created_at |
int | Unix timestamp of creation |
picked_at |
int | Unix timestamp when featured by editors (0 = not featured) |
description |
string | Full deal description |
voucher_code |
string | Coupon / voucher code (if applicable) |
type |
string | Deal, Voucher, Freebie, or Discussion |
status |
string | Activated, Expired, Draft, etc. |
is_expired |
bool | true if the deal is expired |
expirable |
bool | true if the deal has an expiry date |
comment_count |
int | Number of comments |
share_count |
int | Number of shares |
merchant |
string | Merchant/store display name |
merchant_id |
string | Internal merchant ID |
merchant_page_url |
string | URL to the merchant's page on the platform |
merchant_url_name |
string | Merchant URL slug |
submitter |
string | Username of the deal submitter |
submitter_id |
string | User ID of the deal submitter |
image_url |
string | Deal image URL (CDN resolved) |
groups |
list[string] | List of categories/groups the deal belongs to |
The integration registers actions to programmatically interact:
Search for deals on the selected platform. This returns the list of matching deals.
Service Data:
query(string, required): The keyword to search for (e.g.rtx 5080).
Response Data:
deals: A list of matching deals, each containingtitleandurl.
Force the integration to immediately pull the latest data from the platform.
Adding the Pepper platform is done entirely in the UI.
- Navigate to Settings > Devices & Services in Home Assistant.
- Click Add Integration and search for Pepper.
- Set the configuration:
- Platform: Choose your local Pepper platform site (e.g.
mydealz.de). - Sort Mode: Sort deals by
hot(votes/temperature) ornew. - Scan Interval: Minutes to wait between updates (default:
30minutes). - Keywords: (Optional) Comma-separated list of keywords to track.
- Temperature Threshold: (Optional) Min heat to trigger the High Temp binary sensor (default:
500). - Max Deals to Fetch: (Optional) Limit the number of deals fetched per update (default:
30). - Username: (Optional) Your Pepper account username/email.
- Password: (Optional) Your Pepper account password.
- Platform: Choose your local Pepper platform site (e.g.
This integration is fully compatible with HACS.
- Open HACS in Home Assistant.
- Click Integrations and select the three dots in the top-right corner.
- Select Custom repositories.
- Add the URL of the repository:
https://github.com/FaserF/ha-pepperand select Integration as category. - Click Add and download/install the integration.
- Restart Home Assistant.
- Download the latest release
.zipfile from the Releases page. - Extract the
custom_components/pepperdirectory into your Home Assistant'sconfig/custom_components/directory. - Restart Home Assistant.
To prevent rate-limiting and session blocks by Cloudflare WAF or Pepper's server security, the integration implements a multi-layer anti-ban strategy:
- User-Agent Rotation: Mimics authentic user sessions by rotating actual modern browser User-Agents.
- Accept Signatures: Sends matching headers (
Sec-CH-UA,Sec-Fetch-Site, etc.) matching the generated User-Agent signature. - Random Jitter Delay: Every background coordinator poll is delayed by a random offset of
1.0to5.0seconds to evade periodic profiling detection. - XSRF Validation: Extracts valid cookies and validation tokens dynamically from the home page.
- Session Persistence: Session cookies are retained across polls β the login is only performed once per session start, not on every update.
A native Markdown card that loops through the deals attribute list and outputs them in a clean format:
type: markdown
title: "π₯ Top MyDealz Deals"
content: >
{% if state_attr('sensor.pepper_top_deals', 'deals') %}
| Temp | Deal | Price | HΓ€ndler | Typ |
| :--- | :--- | :--- | :--- | :--- |
{% for deal in state_attr('sensor.pepper_top_deals', 'deals')[:10] %}
| **{{ deal.temperature | int }}Β°** | [{{ deal.title }}]({{ deal.url }}) | {% if deal.price %}{{ deal.price }}β¬{% else %}-{% endif %} | *{{ deal.merchant }}* | {{ deal.type }} |
{% endfor %}
{% else %}
Keine Deals geladen.
{% endif %}alias: "Alert when tracked deal expires"
trigger:
- platform: state
entity_id: binary_sensor.pepper_expired_keyword_deal
to: "on"
action:
- service: notify.mobile_app
data:
title: "β οΈ Deal abgelaufen!"
message: "Ein von dir verfolgter Deal ist abgelaufen."alias: "Alert on fire deal"
trigger:
- platform: state
entity_id: binary_sensor.pepper_high_temperature_alert
to: "on"
action:
- service: notify.mobile_app
data:
title: "π₯ Feuer-Deal!"
message: >
{{ state_attr('sensor.pepper_top_deals', 'deals') | selectattr('temperature', '>=', 500) | map(attribute='title') | first }}For in-depth details on the private GraphQL endpoints, query schemas, variables, static image CDN patterns, and anti-ban mechanics, refer to the Pepper Group API Documentation.
I maintain this integration in my free time alongside my regular job β bug hunting, testing on multiple platforms, and refining configurations.
This project is and will always remain 100% free.
Donations are completely voluntary β but every bit of support helps! πͺ
This project is licensed under the MIT License - see the LICENSE file for details.