What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
Use Home Assistant’s Scrape integration when the value is present in the page’s original HTML, the RESTful Sensor when the site has a JSON or REST endpoint, and Command Line plus a small parser for authentication or unusual formats. JavaScript-rendered pages usually require the site’s underlying API or an external browser workflow; the basic Scrape integration does not execute the page’s JavaScript.
Choose the right method first
Home Assistant can turn a web value into a sensor, but the best integration depends on where that value comes from. Test the source before writing YAML: download the page with curl or open its network requests in your browser’s developer tools. If the value is already in the initial HTML, use Scrape. If a JSON endpoint supplies it, use the RESTful Sensor. If you need custom authentication, pagination, transformation, or a parser that Home Assistant does not provide, use Command Line.
| Option | Best source | Processing | Main failure mode | Typical choice |
|---|---|---|---|---|
| Scrape | Server-rendered HTML | Low | Markup or CSS-selector changes | A simple public page |
| RESTful Sensor | JSON or REST API | Low | API contract, authentication, or rate limits | Preferred whenever an endpoint exists |
| Command Line | Any output produced by a script or command | Medium to high | Script errors, dependencies, timeouts, or container context | Complex parsing or custom authentication |
Do not scrape a page merely because it is visible in a browser. An official API, RSS or Atom feed, or webhook normally has a more stable contract and creates less traffic than repeatedly downloading presentation HTML.
Check the page before configuring Home Assistant
Find out whether the value is in the initial response
- Run
curl -L 'https://example.com/status'from a machine that can reach the site. - Search the returned source for the text you see in the browser. A value embedded in the source can usually be handled by Scrape.
- If the source contains only an empty container and scripts, inspect the browser’s Network panel while reloading. Look for a JSON, GraphQL, or other request that returns the value.
- Check the site’s terms, robots policy, authentication requirements, and published rate limits before scheduling requests.
A browser can display a value that was inserted several seconds later by JavaScript. Scrape loads HTML and searches it; it does not provide a general-purpose browser runtime, so it normally cannot see that later-rendered value.
Recommended Free Tools
#1 Best Overall
- 💡 EASIEST WAY TO GET STARTED WITH HOME ASSISTANT - With Home Assistant already installed, it only requires plugging the included power supply and Ethernet cable to get started.
- ✅ OFFICIAL - This official Home Assistant hardware is built and supported by Nabu Casa, the team driving the development of Home Assistant.
- 🏡 DESIGNED FOR THE HOME - The small, fanless, and silent design packs a quad-core processor, 32GB of storage, and 4GB of RAM.
- 📱 ONE HUB TO CONTROL THE WHOLE HOME - Cut down hub and app clutter and control your whole home from Home Assistant Green.
- 🤖 AUTOMATE EVERYTHING - Make all the devices in your home work in harmony - have your lights dim when you start watching a movie, or turn off your heat when you’re away from home.
Method 1: Home Assistant Scrape integration
The Scrape integration is the shortest path for a public, server-rendered page. Configure it through Settings > Devices & services > Add Integration > Scrape, or define it in YAML. One resource can have one or more sensor entries.
Basic YAML
scrape:
- resource: https://example.com/status
sensor:
- name: Example status
select: ".component-status"
select is a CSS selector. Choose a stable class, ID, or semantic element rather than a long path such as body > div:nth-child(3) > .... If several elements match, use index to select one. Use attribute when the value is in an attribute such as content or href, and use value_template to normalize the extracted text.
Extract an attribute or transform a value
scrape:
- resource: https://example.com/price
sensor:
- name: Example price
select: "meta[property='product:price:amount']"
attribute: content
value_template: "{{ value | float(0) }}"
unit_of_measurement: "USD"
Confirm the selector against the downloaded HTML, not only the browser’s Elements panel. The Elements panel shows the post-JavaScript DOM, while Scrape receives the server response.
When Scrape is a poor fit
- The value appears only after a script calls an API.
- The page requires a login, a CAPTCHA, or a consent flow that the simple integration cannot complete.
- The markup changes frequently or the selector depends on generated class names.
- You need pagination, several authenticated requests, or substantial parsing.
In those cases, locate the underlying endpoint or move to a script. A failed selector can leave an old state looking valid, so add a freshness or availability signal rather than silently trusting it.
Method 2: RESTful Sensor for an API
Use the RESTful Sensor whenever the publisher exposes a supported JSON or REST endpoint. It supports GET and POST requests, query parameters, authentication, headers, templates, and multiple sensors from one response. JSON values are commonly read with value_json or JSONPath.
Rank #2
- Includes Raspberry Pi 5 with 2.4Ghz 64-bit quad-core CPU (8GB RAM)
- Includes 128GB Micro SD Card pre-loaded with 64-bit Raspberry Pi OS, USB MicroSD Card Reader
- CanaKit Turbine Black Case for the Raspberry Pi 5
- CanaKit Low Noise Bearing System Fan
- Mega Heat Sink - Black Anodized
Basic JSON example
sensor:
- platform: rest
name: Example value
resource: https://api.example.com/data
value_template: "{{ value_json.value }}"
scan_interval: 300
The default polling interval is 30 seconds; set scan_interval to a slower value that meets your need. Five minutes, as shown above, is more appropriate for a slowly changing price or status than constant polling.
Parameters, headers, and authentication
sensor:
- platform: rest
name: Weather reading
resource: https://api.example.com/reading
params:
city: London
headers:
Authorization: "Bearer {{ states('input_text.api_token') }}"
Accept: application/json
value_template: "{{ value_json.current }}"
unit_of_measurement: "°C"
scan_interval: 600
Keep long-lived secrets in secrets.yaml or another protected mechanism rather than committing them to a public configuration. Use HTTPS and verify the endpoint’s authentication and quota rules.
Refresh on demand
Scheduled polling is not the only option. The homeassistant.update_entity service can request an immediate update, which is useful before an automation makes a decision. If the provider offers push notifications or webhooks, prefer them over frequent polling: push avoids requests when nothing changed.
PC Slower Than It Used to Be?
A free scan shows the junk files, broken settings and background clutter dragging Windows down - then fixes them in one click.Free scan · Windows 10 & 11Outdated Drivers Are Slowing You Down
One free scan finds every outdated or missing driver and matches the right update for your exact hardware.Free scan · exact hardware matchMethod 3: Command Line with an external parser
Command Line is YAML-only and turns a command’s standard output into a sensor. Use it when you need a maintained parser, custom login flow, pagination, a nonstandard response, or a transformation that is awkward in a template. A successful command must print one compact JSON object; a non-zero exit code or timeout is logged and the sensor state is not updated.
A small Python parser
This example uses only Python’s standard library plus requests. It finds the first element with a chosen tag and class, then emits JSON for Home Assistant.
Rank #3
- Includes Raspberry Pi 4 4GB Model B with 1.5GHz 64-bit quad-core CPU (4GB RAM)
- Includes Pre-Loaded 32GB EVO+ Micro SD Card (Class 10), USB MicroSD Card Reader
- CanaKit Premium High-Gloss Raspberry Pi 4 Case with Integrated Fan Mount, CanaKit Low Noise Bearing System Fan
- CanaKit 3.5A USB-C Raspberry Pi 4 Power Supply (US Plug) with Noise Filter, Set of Heat Sinks, Display Cable - 6 foot (Supports up to 4K60p)
- CanaKit USB-C PiSwitch (On/Off Power Switch for Raspberry Pi 4)
#!/usr/bin/env python3
import json
import sys
from html.parser import HTMLParser
import requests
URL = "https://example.com/status"
TARGET_TAG = "span"
TARGET_CLASS = "component-status"
class ValueParser(HTMLParser):
def __init__(self):
super().__init__()
self.capture = False
self.parts = []
def handle_starttag(self, tag, attrs):
if tag != TARGET_TAG or self.capture:
return
attributes = dict(attrs)
classes = attributes.get("class", "").split()
if TARGET_CLASS in classes:
self.capture = True
def handle_data(self, data):
if self.capture:
self.parts.append(data)
def handle_endtag(self, tag):
if self.capture and tag == TARGET_TAG:
self.capture = False
try:
response = requests.get(URL, timeout=20)
response.raise_for_status()
parser = ValueParser()
parser.feed(response.text)
value = " ".join("".join(parser.parts).split())
if not value:
raise RuntimeError("selector returned no value")
print(json.dumps({"value": value}, separators=(",", ":")))
except Exception as exc:
print(str(exc), file=sys.stderr)
sys.exit(1)
Save it, for example, as /config/scripts/read_site.py, make sure the Python environment used by Home Assistant has requests, and test it there before adding the sensor. For a login-protected endpoint, add the required headers or session logic in this script; do not print tokens in standard output.
Call the script from YAML
command_line:
- sensor:
name: External website value
command: >-
python3 /config/scripts/read_site.py
value_template: "{{ value_json.value }}"
scan_interval: 300
command_timeout: 30
Command execution happens in Home Assistant’s configuration directory and, on Home Assistant OS, inside the homeassistant container. A script that works on your laptop may fail there because a binary, Python package, certificate bundle, or environment variable is missing. Run the same command in the same container or operating-system context, then use Home Assistant’s configuration check before restarting.
JavaScript-loaded pages: what to do instead
If a value is inserted after page load, first identify the request that supplies it. An official JSON endpoint is usually the cleanest answer: it avoids browser automation and lets RESTful Sensor handle the response. If no endpoint is available, a small external browser or parser workflow can fetch the rendered page, extract the value, and emit JSON for Command Line. Browser automation adds memory, startup time, authentication state, cookie handling, and another component to maintain.
Do not assume a screenshot alone is a data feed. An image or PDF is useful for a dashboard snapshot or an audit record, but Home Assistant still needs an API response or a parser if an automation must compare a numeric value.
Or skip the browser setup
ScreenshotNeo can render a URL and return a PNG, JPEG, WebP, or PDF through one request. It is useful when you need a clean visual snapshot of a JavaScript-heavy page for a Home Assistant dashboard or archive, while an API or parser remains the right choice for a machine-readable sensor value. Before capture it accepts the cookie or consent banner like a visitor and removes more than 60 known consent platforms, newsletter popups, and chat widgets; each step can be turned off. Bot checks or CAPTCHAs, blank pages, timeouts, failed loads, and cache hits are not billed, and the response identifies the result with X-Page-Verdict and X-Billed headers.
Use the documented API options at ScreenshotNeo’s documentation to wait for a selector, delay, or network idle, run custom JavaScript, select an element, set a device or viewport, use dark mode, load lazy images, or block selected requests. The service also offers an MCP server with take_screenshot, get_page_info, and capture_pdf tools for Claude, Cursor, and other MCP clients.
Rank #4
- Pi5 8GB Pack: RasTech Pi 5 8GB kit includes 1 x Pi5 8GB board ,1 x 64GB Card, 2 x Card Readers,1 x Active Cooler,1 x Case for Pi5, 2 x 4K Micro HD Out Cable,1 x GaN 27W 5A USB-C Power supply,1 x Screwdriver and 1 x instructions.
- Pi5 8GB Board: The Pi5 board is equipped with a 64-bit quad-core Arm Cortex-A76 processor running at 2.4GHz and an 800MHz VideoCore VII GPU with support for OpenGL ES 3.1 and Vulkan 1.2, which delivers a significant increase in graphics performance. Dual HD Out 4Kp60 display outputs and a built-in dual 4-channel MIPI camera/display transceiver provide state-of-the-art camera support. The Pi 5 offers a 2-3 times increase in CPU performance compare to Pi4.
- Important Graphics Features: Equipped with an 800MHz VideoCore VII GPU and providing better graphics performance, suitable for multimedia applications,gaming,and graphics intensive tasks.Provides 1 UART interface,1 card slot that supports high-speed operation, 2 USB. 3 0.5 ports that support synchronous 0Gbps operation,2 USB 2.0 port ports,2 4Kp60 display outputs that support HDR.Built-in dedicated dual 4-channel 1Gbps MIPI DSI/CSI connectors,triple the total bandwidth.
- Cooling Kit for Pi 5: Compatible with Active Cooler for Raspberry Pi5, It can provide Pi 5 board with better cooling effect in using. The Case can accurately access usb-c power jack,Micro HD Out ports, usb ports, Ethernet jack, card slot, power button, 4-lane MIPI DSI/CSI connectors and so on, and it also supports installation of cooling fan.
- 64GB Card Kit and GaN 27W USB-C Power Supply: With extra 64GB card to store more files and card readers for multiple medium, keep better performance for Raspberry Pi 5, 27W USB C Power Supply is Compatible with Pi5 8GB, offers a variety of output voltage options, including 5.1V at 5A, 9.0V at 3.0A, 12.0V at 2.25A, and 15.0V at 1.8A, providing for different device requirements.
One-call cURL example
curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://example.com/status -o shot.webp
Python
import requests
r = requests.get("https://api.screenshotneo.com/v1/shot", params={"access_key": "YOUR_API_KEY", "url": "https://example.com/status"}, timeout=90)
r.raise_for_status()
open("shot.webp", "wb").write(r.content)
Node.js
const q = new URLSearchParams({ access_key: 'YOUR_API_KEY', url: 'https://example.com/status' });
const res = await fetch(`https://api.screenshotneo.com/v1/shot?${q}`);
if (!res.ok) throw new Error(`${res.status} ${res.statusText}`);
const fs = await import('node:fs/promises');
await fs.writeFile('shot.webp', Buffer.from(await res.arrayBuffer()));
ScreenshotNeo’s Free plan includes 1,000 screenshots per month with no card; paid plans start at $5 for 3,000 shots, and every feature is included on every plan. If you want rendered snapshots rather than a browser stack to operate, create a free ScreenshotNeo account.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Polling, push, and freshness
Choose the slowest polling interval that still serves the automation. A rapidly changing value may justify a shorter interval; a daily schedule or event-driven webhook is better for a daily report. Respect the source’s terms and rate limits and identify your client where the service permits it.
- Create a separate availability or freshness sensor so a stale value is visible.
- Keep the last-known-good value when a transient request fails, but alert on the failure instead of treating it as current.
- Log the HTTP status, parser result, and timestamp in your external script without exposing credentials.
- Use stable semantic attributes and keep selectors in one place so a redesign has one obvious fix.
- Review selectors after any major redesign; scraping is inherently more fragile than an API contract.
Home Assistant’s architecture guidance describes web scraping as very fragile and notes that it can break when sites change or vendors block scraper traffic. New core integrations are not expected to rely on web scraping, although generic HTML parsing and custom integrations remain possible.
Troubleshooting common failures
The sensor is unavailable or never changes
- Wrong execution context: run the exact command inside the Home Assistant container or host, not only in a desktop shell.
- Timeout: increase the command timeout modestly, then investigate slow DNS, TLS, redirects, or a site that blocks automated clients.
- Non-zero exit code: inspect the script’s standard error. Do not hide exceptions by always returning a successful JSON object.
- Authentication failure: verify the token, cookies, headers, and endpoint URL; keep secrets out of logs.
The selector worked and then stopped
Download the current HTML and compare it with the selector’s assumptions. The site may have renamed a class, moved the value into an attribute, or changed to client-side rendering. Replace brittle nested selectors with stable attributes, or switch to the underlying API.
The browser shows a value but Scrape does not
This is the usual JavaScript-rendering symptom. Inspect Network requests for JSON or another data endpoint. If none exists, use an external browser workflow or a rendered snapshot service for visual output; Scrape alone will not execute the page’s application code.
Best Value
- 【What you Get】You will get 1*Pi 5 8GB Single Board,1*RasTech Case,1*Active Cooler,1*Screwdriver,1*Installation instructions,12-month free warranty, lifetime service, 24-hour prompt and friendly response.
- 【More Connectors】There are two USB 3.0 ports(5Gbps simultaneously) and two USB 2.0 ports, which triple total bandwidth ,support any combination of up to two cameras or displays. Peak SD card performance is doubled through support for the SDR104 high-speed mode. It provides a smooth desktop experience for you. Offer Gigabit Ethernet and a PCIe interface, along with dual-band Wi-Fi and Bluetooth 5.0/BLE wireless capability. The RasTech Pi 5 Kit use the new 27W 5.1V 5A USB-C power connector.
- 【 Support Dual 4Kp60 Display 】Each of the two microHDMI sockets can control a 4K display at 60 Hertz, now support HDR, offering super HD video for media streaming projects. RPi 5 is the first RPi model that comes with a PCI Express port (PCIe 2.0 x1 with 500 MB/s) to attach SSDs (requires separate M.2 HAT).
- 【 Excellent Chips And Applications】Pi 5 is a full-size Pi computer using silicon built in-house at Pi. The RP1 “southbridge” provides the bulk of the I/O capabilities for Pi 5. Pi 5 is more friendly and convenient in the development of Internet of Things, Web development, machine identification, automatic control and other electronic equipment applications and network.
- 【 Faster CPU, Better GPU 】 Pi 5 features a Broadcom BCM2712 64-bit quad-core Arm Cortex-A76 processor running at 2.4GHz, it delivers a 2–3× increase in CPU performance relative to RaspberryPi 4. The 800MHz VideoCore VII GPU is compatible to OpenGL ES 3.1 and Vulkan 1.2, substantial uplift in graphics performance. Pi 5 Offers lightning-fast CPU speed, a PCI Express interface, a Real Time Clock (RTC) and a power button and runs significantly cooler than Pi 4.
REST templates produce an empty state
Log or temporarily display the raw response and verify its shape. A value at {"data":{"price":12}} needs value_json.data.price, not value_json.price. Also check that the endpoint returns JSON rather than an HTML login or rate-limit page.
Values contain currency symbols or extra text
Normalize them in value_template or the external parser, and define a unit separately. Validate missing values explicitly so an error page is not converted to zero.
Hardware for a dedicated installation
If you want the scraper, REST sensors, and scripts to run independently of a desktop computer, Home Assistant Green is the official plug-and-play host. The current product page lists a recommended MSRP of $199, 4 GB of RAM, 32 GB of eMMC storage, Gigabit Ethernet, and two USB 2.0 ports. Retailer pricing and availability vary by region, so verify them before ordering. The hardware does not remove the need to maintain selectors, credentials, polling intervals, or parser dependencies.
Quick wins for a faster PC:
Repair Windows errors before they cause bigger problemsFix Now →Fix the driver behind crashes, sound loss and screen glitchesFind Drivers →Clear out junk files and repair common Windows errorsFree Scan →FAQ
Can I scrape a page that requires a login?
Sometimes. RESTful Sensor can send supported headers and parameters, while Command Line can manage a session, cookies, or a multi-step authentication flow. Confirm that the site permits automated access and protect every credential.
Can one page create several sensors?
Yes. Scrape can define multiple sensor subentries under one resource, and RESTful Sensor can map multiple values from one endpoint. Reuse the same request where possible instead of downloading the page separately for every value.
How often should a website sensor update?
There is no universal interval. Match the source’s change rate and your automation’s tolerance for delay, then choose the slowest schedule that works and move to push or webhooks when available.
Can ScreenshotNeo turn a rendered page directly into a numeric Home Assistant sensor?
It returns an image or PDF, not a documented numeric extraction result. Use its clean rendered output for visual monitoring or records; obtain the sensor value from an API or a parser that emits JSON.
Do these 3 things before closing this tab:
1Fix the driver behind crashes, sound loss and screen glitches2Repair Windows errors before they cause bigger problems3Scan for outdated or missing drivers - takes under a minuteQuick Recap
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

