Site scraper

Home Depot Scraper API: Store Prices and Product Pages

HTTP $0.50JS rendering $2.00 per 1,000 results or your own scraper from $1.95/GB

ProxyField's method for one Home Depot store's prices: (1) select the store by ZIP code or store number in the page, (2) wait until the header shows that store, (3) read every product URL in the same sticky session, and start a new session for the next store. One store's 1,000 product pages cost about $5.90 with your own Playwright scraper on 61.2M+ US residential IPs (about 2 GB at $2.95/GB; start with the Easy Trial, 1 GB for $2.95), or $2.00 per 1,000 rendered results, $1.00 from 10,000 in one purchase, on the Web Scraping API's design.

Web Scraping API per 1,000 successful results
Web Scraping API prices per 1,000 successful results
FetchEntryVolume, from
HTTP$0.50$0.20
JS rendering$2.00$1.00

Billed on successful results only.

Your own scraper on residential proxies
from $1.95/GB Easy Trial: 1 GB for $2.95
gate.proxyfield.io:7000
Web Scraping API (the API's design)Your own scraper on ProxyField proxies
StatusIn development: access through Contact salesRuns today, from the Easy Trial
Store set byZIP code or store number in the page, run as browser actions with render: trueZIP code or store number in the page, typed by Playwright
Store lookupHome Depot's store locator: ZIP code or city to store name and numberthe same
One store's 1,000 product pages$2.00, or $1.00 from 10,000 results in one purchaseabout $5.90 (2 GB at $2.95/GB)
Price$0.50 per 1,000 successful results (HTTP), $2.00 (JS rendering); from $0.20 and $1.00 from 10,000 results in one purchase$2.95/GB for 1 GB, from $1.95/GB
One exit IP per storesession_id (up to 10 minutes in the design)a sticky session from 30 s to 36 h
US coverageExit IPs in the US (country: us)61.2M+ US residential IPs, all 50 states, 2,800+ cities
What you getThe page as HTML, Markdown, text or JSON, plus the result of each actionWhatever your browser reads
StartContact sales; parameters in the API documentationEasy Trial: 1 GB for $2.95
Data

How to scrape Home Depot prices for one specific store

Set the store once per session, then read every product in that session: the store step adds one page load per session, not per product. Home Depot ties price and stock to the store the shopper has selected: its customer support answers tell shoppers to choose their store from the store name near the logo, after which prices and availability update for that store. A plain request without that step reads the price for whatever store the site picks by default.

Read moreShow less
  1. Find the store

    Look up the store's ZIP code and store number in Home Depot's store locator. You see a list of stores near the ZIP code, each with its name and address.

  2. Start a fresh session on one US IP near the store: <login>-country-us-region-georgia-city-<city>-session-hd30339-ttl-1800, with the store's city from the city list in your dashboard, keeps one IP in that city for 30 minutes. ProxyField targets exit IPs by country, region (state) and city, not by ZIP code. The store comes from Home Depot's store setting, not from the IP; an IP in the store's city keeps the visit consistent.

  3. Select the store in the page by ZIP code or store number. The page refreshes, and the header shows that store's name.

  4. Fetch each product URL in that same session

    Each product page shows the price and stock for that store.

  5. Store what you read price, stock status, fulfillment method (pickup, delivery, ship to home), store number, ZIP code and timestamp. In-store, pickup, delivery and online prices can differ, so record which one you read.

To compare stores, repeat the steps with a new session for each store.

Check you are reading the right store

Store a price only when every check passes; otherwise the reading belongs to another store or is incomplete.

CheckWhere to read itFailure signWhat to do
Store nameThe store shown in the page headerThe header shows another store, or the default store, after the selector step; the script below prints store: not set: check the stepsRun the store step again in the same session; if it fails twice, start a new session
Store numberYour store-locator lookup, kept with every readingA reading without a store numberDo not store it: a price without its store cannot be compared
ZIP codeThe ZIP you entered in the store selectorThe selector closed without a ZIP, or with another oneFill the ZIP again and wait for the page to refresh
Fulfillment typeThe pickup, delivery or ship-to-home option next to the priceNo option selected, or a different one than in your last runRecord which one you read; in-store, pickup, delivery and online prices can differ
Price presentThe price block on the product pageThe price is empty on the first load; the script below stops with Playwright's TimeoutError (Timeout 10000ms exceeded)Part of the price can load by script after the first render: wait for the price element, then read it
Exit IPOne sticky session per storeThe session went idle for 120 s, or an exit node dropped and the IP changedCheck the store name again before the next price

What the two kinds of run print with the script below:

# a run you can store
store: <the store name Home Depot shows in the header>
30339 https://www.homedepot.com/p/<name>/<item-id> $<price>

# a run you must not store
store: not set: check the steps

What one store's prices cost

A store's price needs a rendered page, so both routes are priced for a browser load:

Route1,000 product pages for one storeHow it is counted
Web Scraping API with render: true (the API's design)$2.00, or $1.00 from 10,000 results in one purchaseper successful result; failed and blocked requests are not billed
Your own Playwright scraper on ProxyField proxiesabout 2 GB of traffic: 2 × $2.95 = $5.90 at the 1 GB rate, or 2 × $2.79 = $5.58 inside a 10 GB purchaseper GB, at about 2 MB for a full page in a headless browser (an example size: measure your own pages, see how much proxy traffic you need)

With your own scraper (Python and Playwright)

This is the part you can run today: the same steps in Playwright, through a ProxyField sticky residential IP in the store's city. It sets the store before it reads anything, then prints the store, the URL and the price for each product. The selectors and button texts follow the steps Home Depot describes for shoppers and are a starting point: check them against the live page in DevTools before a run, because retail pages change.

Python
import re
from playwright.sync_api import sync_playwright

ZIP = "30339"
ITEMS = ["https://www.homedepot.com/p/<name>/<item-id>"]
PROXY = {"server": "http://gate.proxyfield.io:7000",
         "username": "<login>-country-us-region-georgia-city-<city>-session-hd30339-ttl-1800",
         "password": "<password>"}

with sync_playwright() as p:
    browser = p.chromium.launch(proxy=PROXY)
    page = browser.new_page(locale="en-US")
    page.goto(ITEMS[0], wait_until="domcontentloaded")
    # set the store the way a shopper does; check the names against the live page first
    page.get_by_role("button", name=re.compile("store", re.I)).first.click()
    page.get_by_role("textbox").first.fill(ZIP)
    page.keyboard.press("Enter")
    page.get_by_role("button", name=re.compile("shop this store|set as my store|select", re.I)).first.click()
    page.wait_for_load_state("networkidle")
    store = re.search(r".*store.*", page.locator("header").inner_text(), re.I)
    print("store:", store.group(0) if store else "not set: check the steps")
    for url in ITEMS:
        page.goto(url, wait_until="networkidle")
        price_el = page.locator("[data-testid*=price], [class*=price]").first
        price_el.wait_for(timeout=10000)  # part of the price can load by script after the first render
        price = price_el.inner_text()
        print(ZIP, url, " ".join(price.split()))
    browser.close()

A wrong-store run prints another store's name on the store: line, or store: not set: check the steps; a missing price fails the wait_for after 10 seconds. Both are failure signs in the check table above: do not store those readings.

A plain HTTP client such as Python requests reads the page for the default store, and part of the price can load by script after the first render. Use it for search rankings and catalog lists; use a browser, or the API with render: true, for store prices. Keep the browser busy: an IP idle for 120 s gets a new IP, and if an exit node drops, the gateway retries once with a new session, so the IP may change. When that happens, check the store name again before you store a price.

With the Web Scraping API (the API's design)

The API is in development and available through Contact sales; this is its design. One rendered request opens a product page, runs the store steps in a real browser and returns the page with that store's price. session_id keeps one exit IP for up to 10 minutes, so a batch of items for one store looks like one shopper. All parameters: API documentation.

Shell
# The request the Web Scraping API takes (in development; access through Contact sales)
curl https://api.proxyfield.io/v1/scrape \
  -H "Authorization: Bearer <api_key>" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://www.homedepot.com/p/<name>/<item-id>",
    "render": true,
    "country": "us",
    "session_id": "hd-store-30339",
    "output": "json",
    "actions": [
      {"type": "evaluate", "script": "[...document.querySelectorAll(\"header button, header a\")].find(e => /store/i.test(e.textContent))?.click()"},
      {"type": "wait_for", "selector": "input", "timeout_ms": 10000},
      {"type": "fill", "selector": "input[placeholder*=\"ZIP\" i]", "value": "30339"},
      {"type": "evaluate", "script": "[...document.querySelectorAll(\"button\")].find(b => /shop this store|set as my store|select/i.test(b.textContent))?.click()"},
      {"type": "wait", "ms": 3000},
      {"type": "evaluate", "script": "document.querySelector(\"header\")?.innerText.match(/.*store.*/i)?.[0]"}
    ]
  }'

Example response (shortened):

JSON
{
  "metadata": {"id": "req_5d21c0a7e94b3f18", "api": "web_scrape", "status": "success", "billed": true},
  "status_code": 200,
  "final_url": "https://www.homedepot.com/p/<name>/<item-id>",
  "cookies": [{"name": "<cookie>", "value": "<value>", "domain": ".homedepot.com", "path": "/"}],
  "content": "<!DOCTYPE html><html lang=\"en\">…</html>",
  "actions_log": [
    {"type": "evaluate", "ok": true},
    {"type": "wait_for", "ok": true},
    {"type": "fill", "ok": true},
    {"type": "evaluate", "ok": true},
    {"type": "wait", "ok": true},
    {"type": "evaluate", "ok": true, "result": "<the store name Home Depot now shows>"}
  ]
}
  • Check the store on every page. The last action returns the store name the header shows; store a reading only when it matches the store you asked for (the checks in the table above). actions_log shows which step failed ("ok": false with an error).
  • The selectors are a starting point. They follow the steps Home Depot describes for shoppers; check the button texts and the ZIP field against the live page in DevTools before a run, because retail pages change.
  • Reuse the store for the next items. The response's cookies[] holds the cookies the page set after the store change. Send them back in the cookies parameter (name=value; name2=value2) with the same session_id for the other items of that store, and keep checking the store name: whether the store choice survives in the cookies is something to test on the live site.
  • Browser steps need rendering. actions and wait_for work only with render: true; without it the API answers 400 unsupported_combination with the message wait_for needs render=true., and a rejected request is not billed.

Home Depot data on public pages

A scraper reads what a logged-out shopper sees for the store and delivery area set in the session. The Web Scraping API fetches the page; there is no separate Home Depot API on ProxyField with pre-parsed fields, so your parser reads them.

Read moreShow less
PageURL patternWhat it shows
Product pagehomedepot.com/p/<name>/<item-id>Title, brand, model and item numbers, price, was-price and savings, store stock and aisle, delivery options, rating, review count, specifications
Search resultshomedepot.com/s/<query>Products in the order of the sort you chose, prices, badges, ratings
Category pageshomedepot.com/b/<department>/N-<id>Products in a department, with filters and prices
Reviews and questionson the product pageRatings, review text, dates, shoppers' questions and answers
Store locator and store pageshomedepot.com/l/...Store name, address, opening hours, phone

The sort order and filters you pick on the site become part of the search URL, so copy the URL of the sorted view and page through it. The API returns the page itself as HTML, Markdown or plain text, or a JSON envelope with the status code, the final URL, the headers, the cookies, the content and the action results.

For search and category pages, send the URL with plain HTTP; the request body is url, render (false for plain HTTP, true for JS rendering), country and output (html, markdown, text or json), with your API key in an Authorization: Bearer <api_key> header.

Shell
# The request the Web Scraping API takes (in development; access through Contact sales)
curl https://api.proxyfield.io/v1/scrape \
  -H "Authorization: Bearer <api_key>" \
  -H "Content-Type: application/json" \
  -d '{"url": "https://www.homedepot.com/s/cordless%20drill", "render": false, "country": "us", "output": "json"}'

In the Web Scraping API, country sets the country the request comes from (the exit IP), as a two-letter code such as us; the countries it accepts: the proxy pool's 195+ countries.

Pricing

Pricing: $0.50 per 1,000 pages, from $0.20

Every Home Depot page type costs the same on the Web Scraping API; only the mode changes the price. Store prices need rendering, so they cost the JS price. The volume price starts at 10,000 successful results in one purchase.

Mode
Mode, Price per 1,000 successful results, Use it for
ModePrice per 1,000 successful resultsUse it for
Plain HTTP$0.50, from $0.20Search and category pages, rankings, catalog lists for the default store
JS rendering$2.00, from $1.00One store's prices and stock: the store selector and the parts of the page filled in by scripts
Workload (30-day month)ModeResults a monthEntry priceVolume price
5,000 items at one store, dailyJS150,000$300$150
1,000 items at 10 stores, weekly (4 runs)JS40,000$80$40
50 search terms, first 5 result pages, dailyHTTP7,500$3.75$1.50
  • Billed a page Home Depot answered with a 2xx status; a target's 404 or 410, and a sign-in page the site serves with a 200 status, also count as billed results.
  • Not billed error responses, blocked requests, timeouts and our internal retries on new IPs. Every response says whether it was billed.

Payment and balance for the API: the same crypto balance as proxies, which never expires; there is no subscription or monthly fee. Contact sales through the sales team on our 24/7 live chat. All prices: pricing.

Through the sales team on our 24/7 live chat

Compare

Is there an official Home Depot API?

Not one for shoppers or analysts: we found no documented public Home Depot API for product prices, stock or search results. Product data across the catalog, and the price for a given store, comes from the public pages, which is what a scraper reads.

Good to know

Does Home Depot block scrapers?

Expect it. Large retailers, Home Depot among them, answer fast, repetitive or datacenter traffic with a block or challenge page instead of the product. US residential IPs, one sticky session per store, a pause of a few seconds between requests from one IP, a real browser for the store step and a check that each page holds a price and the right store before you store it reduce failures. With the Web Scraping API you pay only for successful results.

Proxy settings for your own Home Depot scraper

ProxyField has 61.2M+ residential IPs in the United States, in all 50 states and 2,800+ cities, with targeting by country, region (state) and city at the same price per GB.

SettingValue
Gatewaygate.proxyfield.io:7000, HTTP, HTTPS and SOCKS5 with the same username and password
Username<login>-country-us-region-<state>-city-<city>-session-<id>-ttl-<seconds>, lowercase with underscores (city-new_york); every part after the login is optional
Sessionsa new IP on every request, or sticky from 30 s to 36 h (ttl 30 to 129,600 s; 20 minutes when no ttl is set)
Idle IPreplaced after 120 s without traffic
Threadsunlimited concurrent threads
Price$2.95/GB for 1 GB, $2.79 from 10 GB, $2.65 from 50 GB, down to $1.95 from 1,000 GB; traffic never expires; all purchases are final

Access opens once the payment is confirmed; the gateway, credentials or allowlist are in your account.

What teams do with Home Depot data

  • Price monitoring for brands and competing retailers, by store and online.
  • Stock and availability tracking of tools, appliances and seasonal items, store by store.
  • Assortment research: what Home Depot lists in a category and at which price points.
  • Review and question mining to find product problems and missing information.
  • Minimum advertised price checks for manufacturers.

For price runs across several retailers, see price scraping and proxies for price monitoring.

More scrapers

More scrapers

FAQ

Home Depot Scraper API FAQ

24/7 support by live chat, including help with setup and integration.

What is a Home Depot scraper API?

ProxyField covers Home Depot with its Web Scraping API, in development and available through Contact sales, which fetches public homedepot.com product, search and category pages for $0.50 per 1,000 successful results, or $0.20 from 10,000 results in one purchase. In general, a Home Depot scraper API is a service that fetches Home Depot pages through its own IPs so you can collect prices, stock and ratings without running your own proxies.

How do I scrape Home Depot prices for one specific store, since the price changes depending on which store is selected?

Set the store first and read every product in that same session: one store's 1,000 product pages cost about $5.90 on ProxyField's US residential proxies (2 GB at $2.95/GB) or $2.00 on the Web Scraping API's design ($1.00 from 10,000 results in one purchase; in development, Contact sales). Find the store's ZIP code and number in Home Depot's store locator, open a product page from a sticky US IP near the store, select the store by ZIP code and wait until the header shows it, then fetch each product URL. Store a price only when the header shows your store and the price element has loaded, with the store number, the fulfillment type and the time, and start a new session for the next store.

Is there an official Home Depot API?

Not a documented public one for product prices, stock or search results, as far as we found. Catalog-wide prices and store stock come from the public pages, read for the store you set.

Why does the same Home Depot item show different prices?

Because the price belongs to the selected store, and in-store, pickup, delivery and online prices can differ. A scraper that does not set a store reads the default one, so store each price with its store number, ZIP code and fulfillment method.

How do I find a Home Depot store number or ZIP code for scraping?

Look the store up in Home Depot's store locator, which lists the stores near a ZIP code or city. Use the store's ZIP code in the store selector, and keep the store number with every reading as the key that ties prices to one store.

What data can I extract with a Home Depot scraper?

From product pages: title, brand, model and item numbers, price and savings, store stock, delivery options, rating, review count and specifications. Search and category pages add the ranking order and badges, and store pages give address and opening hours.

How do I scrape Home Depot product pages?

Collect product URLs from search or category pages, then fetch each /p/ page through US residential IPs, with the store set first if you need a store's price. Keep a few seconds between requests per IP, check that every page holds a price, or send the URLs to a scraping API.

Can I scrape Home Depot search results in a chosen sort order?

Yes: the sort and the filters you pick on the site become part of the search URL, so fetch that URL and page through the results. Store the position of each product with the date to track rankings for a query; plain HTTP at $0.50 per 1,000 successful results covers it.

Does Home Depot block web scraping?

Expect fast, repetitive or datacenter traffic to get a block or challenge page instead of the product. US residential IPs, one sticky session per store, a slow rate per IP and a real browser for the store step reduce blocks.

What can I do with Home Depot product data?

Track prices and promotions against competitors, follow store stock of tools and appliances, research what sells in a category and at which price, check minimum advertised prices, and mine reviews and questions for product problems.

Show 9 more questionsShow fewer questions

How reliable is a Home Depot scraper?

As reliable as its handling of blocks and page changes: a scraper that checks every page for a price and the right store, retries failures on a new IP and alerts when its parser stops finding fields keeps working. When Home Depot changes its page layout, the parser and the store-selector steps need an update, whichever tool fetches the pages.

How quickly does a Home Depot scraper deliver results?

Speed depends on the page type, since JS rendering and the store step take longer than plain HTTP, and on how many requests you run in parallel. The Web Scraping API is designed for 20 concurrent requests per account; with your own scraper on ProxyField proxies you get unlimited concurrent threads.

How do I schedule daily Home Depot price checks?

Run the scraper from cron or a workflow tool at the same hour each day, set the store at the start of each run, keep each reading with its date and store, and alert on runs that return far fewer items than usual.

Is a Home Depot scraper API easy to integrate?

Yes, if your code can make an HTTP request: you send a Home Depot URL, with browser actions for the store step, and get the page back, then parse it with the library you already use. With your own scraper, ProxyField proxies plug into Python, Node.js, Scrapy, Selenium, Playwright and Puppeteer through one gateway, gate.proxyfield.io:7000.

Can AI extract fields from Home Depot pages?

Yes: you can pass the fetched page, or its text, to a language model and ask for price, model and stock as fields. It costs more per page than a parser that reads the page's fields directly, so use it for pages a parser handles badly.

Are there Home Depot web scraper services that deliver the data?

Some vendors run the scraper for you and deliver files. ProxyField's offer is the Web Scraping API and the proxies: you keep the parser and the schedule, and pay $0.50 per 1,000 successful results or per GB of proxy traffic.

Can a SERP API scrape Home Depot?

A SERP API returns a search engine's results page, not Home Depot's own search: ProxyField's Google SERP API returns Google's results for a query such as a product name for $1.20 per 1,000 successful results. For Home Depot's own search and product pages, use the Web Scraping API.

Which is the best Home Depot price scraper in the United States?

ProxyField's Web Scraping API is one option: $0.50 per 1,000 successful results, from $0.20, and $2.00 with JS rendering for store prices, plus US residential proxies in all 50 states for your own scraper. When you compare tools, check whether they set the store before reading prices, how they bill pages that fail, and the price per 1,000 pages.

Can I try Home Depot scraping on a small budget?

Yes: for your own scraper, the Easy Trial is 1 GB of residential traffic for $2.95 with no subscription, and the traffic never expires. For the Web Scraping API, contact sales with your page types and volume.

Collect Home Depot pages with the Web Scraping API

Billed on successful results only. Contact sales for the Web Scraping API and the volume you need, or run your own scraper on residential proxies. 24/7 live chat helps with setup and integration.