How to Scrape eBay
Need eBay listing data? Start with the official Browse API: scraping eBay pages without express permission conflicts with its current US User Agreement.

Short answer: If you need eBay listing data, start with eBay’s documented Browse API and confirm you are eligible to use it. Do not build an HTML scraper unless eBay has given you prior express permission. The current US User Agreement says automated access using a scraper or similar means requires that permission; low request rates, proxies, or browser automation do not change the stated requirement. The policy and contracting entity can vary by market, so read the agreement that applies to you.
This guide covers the compliant API path, runnable search examples, production access, quotas, data-use questions, and ways to inspect a listing page visually when that is actually your task. It does not provide a recipe for bypassing access controls or extracting listings from pages without permission.
1. Understand what “scrape eBay” means
People use “scrape” to mean two different things: collect listing data, or capture a visual image of a page. For structured fields such as item title, price, condition, and listing identifiers, use an authorized data interface. For an image of a page you are allowed to capture, use a screenshot workflow. A screenshot is a visual artifact; it is not a substitute for an item-data API or permission to collect, store, or redistribute listing information.

eBay’s US User Agreement, effective June 28, 2026 for users who had agreed to an earlier version, prohibits using robots, spiders, scrapers, data mining or extraction tools, and other automated means to access its services without eBay’s prior express permission. The agreement also addresses circumvention of technical measures and unreasonable or disproportionately large infrastructure load. Review the [applicable agreement](https://www.ebay.com/help/default/default/user-agreement?id=4259) for your location and circumstances.
Changing the implementation from direct HTTP requests to a headless browser, rotating IPs, or slower requests does not itself grant permission. If you have a use case that requires automated access beyond documented API access, ask eBay for express permission before building it.
2. Use the Browse API for item searches
The [Browse API](https://developer.ebay.com/api-docs/buy/api-browse.html) documents item search by keyword and other criteria, including category, GTIN, eBay product ID, and image. Search returns item summaries; a separate item resource can provide details. Calls require an application access token.
Before committing to this design, check the [Buy APIs overview](https://developer.ebay.com/api-docs/buy/buy-overview.html). Some Buy APIs are limited release and require approval by eBay business units. API availability is not universal, so confirm production eligibility for the specific method you plan to use.
Implementation sequence
- Register for the eBay Developers Program and create an application, following eBay’s current setup instructions.
- Check whether your chosen Browse API method is available to your application in production. If access is limited, resolve eligibility before building a production dependency on it.
- Obtain an application access token according to eBay’s authentication documentation. Treat it as a secret: do not put it in browser code, a public repository, or logs.
- Call the documented search method with a query and any supported filters. Begin with a narrow query and request only the data your feature needs.
- Use the item resource for details only when the summary is insufficient. This avoids unnecessary calls and keeps your integration aligned with the endpoint’s documented behavior.
- Review the applicable API license and terms before displaying, retaining, or redistributing returned data.
The examples below show the request shape for a search after you have an application token. Set EBAY_APP_TOKEN in your environment using your approved credential flow. Confirm the current method path, parameter names, required headers, response schema, and access conditions in eBay’s endpoint documentation before deployment; API details and availability can change.
3. Call the search endpoint
Use eBay’s documented item_summary/search method. This illustrative request searches for “wireless headphones” and asks for a small first page of results. Consult the [official method reference](https://developer.ebay.com/api-docs/buy/browse/resources/item_summary/methods/search) for supported filters and the current response format.
cURL
curl --get 'https://api.ebay.com/buy/browse/v1/item_summary/search' \
--data-urlencode 'q=wireless headphones' \
--data-urlencode 'limit=10' \
--header "Authorization: Bearer $EBAY_APP_TOKEN" \
--header 'X-EBAY-C-MARKETPLACE-ID: EBAY_US' \
--header 'Accept: application/json'
Keep the token out of the command line where your shell history or process list could expose it. For a local experiment, environment variables are convenient; for a deployed service, use your platform’s secret store and the credential-handling guidance from eBay.
Python
import os
import requests
url = "https://api.ebay.com/buy/browse/v1/item_summary/search"
headers = {
"Authorization": f"Bearer {os.environ['EBAY_APP_TOKEN']}",
"X-EBAY-C-MARKETPLACE-ID": "EBAY_US",
"Accept": "application/json",
}
params = {"q": "wireless headphones", "limit": 10}
response = requests.get(url, headers=headers, params=params, timeout=20)
response.raise_for_status()
data = response.json()
for item in data.get("itemSummaries", []):
print(item.get("title"), item.get("price", {}).get("value"), item.get("itemWebUrl"))
Install the dependency with python -m pip install requests. The code deliberately raises on unsuccessful HTTP responses instead of treating an error payload as search results. In production, handle timeouts, retryable responses, and schema variation explicitly.
Node.js
const token = process.env.EBAY_APP_TOKEN;
if (!token) throw new Error("Set EBAY_APP_TOKEN first");
const url = new URL("https://api.ebay.com/buy/browse/v1/item_summary/search");
url.search = new URLSearchParams({ q: "wireless headphones", limit: "10" });
const response = await fetch(url, {
headers: {
Authorization: `Bearer ${token}`,
"X-EBAY-C-MARKETPLACE-ID": "EBAY_US",
Accept: "application/json",
},
signal: AbortSignal.timeout(20_000),
});
if (!response.ok) {
throw new Error(`Browse API returned ${response.status}: ${await response.text()}`);
}
const data = await response.json();
for (const item of data.itemSummaries ?? []) {
console.log(item.title, item.price?.value, item.itemWebUrl);
}
Run with a supported Node.js version that provides built-in fetch and AbortSignal.timeout, or use your project’s HTTP client and timeout mechanism. Do not expose an application token in client-side JavaScript.
4. Choose search fields and retrieve details carefully
The Browse API documentation lists search approaches beyond a plain keyword. Depending on your use case and access, investigate category, GTIN, eBay product ID, image-based search, and other supported criteria in the method documentation. A broad text query can produce results that need refinement; use the API’s documented filters rather than scraping page markup for extra fields.
Search results are summaries. If your workflow needs more item-specific information, use the documented item resource and request details only for selected results. This can reduce calls, simplify quota management, and avoid fetching data your feature never displays.
Do not assume API access permits every downstream use. Read the API license and applicable terms for rules about storage duration, presentation, user information, and redistribution. The developer documentation governs API use, while the user agreement covers access to eBay services; one should not be treated as a blanket grant for all data handling.
5. Plan for access, quotas, and presentation rules
eBay’s [API call limits page](https://www.developer.ebay.com/develop/get-started/api-call-limits) lists product-specific ceilings and describes an Application Growth Check for requesting higher limits. There is no single safe quota to copy across all Browse methods. Verify the limit for the exact product and method your application will call, and recheck it before launch.
- Budget calls by workflow: estimate searches and detail lookups separately. Avoid requesting details for every result if summaries meet the need.
- Handle limits deliberately: record response status and relevant headers, apply bounded backoff to retryable failures, and surface persistent quota issues to operators.
- Cache only as allowed: decide whether caching is permitted and for how long from the applicable license and terms. Do not infer permission from technical ability to store a response.
- Verify production access: sandbox or development success does not establish production approval for limited-release APIs.
There is also a specific presentation constraint in eBay’s documented [guest-checkout browse/search requirements](https://developer.ebay.com/api-docs/buy/buy-requirements.html): partners and users may not sort items in that integration context; the returned order reflects eBay’s relevance algorithm. Apply that rule to the documented guest-checkout use case and verify requirements for your own integration rather than generalizing it to every API consumer.
6. If the task is a screenshot, capture a page you may access
For a visual record of a listing or search page you are authorized to capture, a browser screenshot can be appropriate. Keep the scope to the visual artifact: it does not turn page contents into authorized structured data, and it does not override eBay’s automation terms. Respect applicable access conditions and do not attempt to bypass CAPTCHAs or other technical measures.
A self-managed browser capture typically needs a browser runtime, navigation and readiness logic, viewport settings, and image output handling. It can be affected by consent banners, dynamic content, lazy-loaded media, and page changes. If your goal is extracting listing fields at scale, return to the official API route rather than parsing screenshot pixels or page HTML.
7. Troubleshooting the API integration
| Symptom | Likely cause | What to check |
|---|---|---|
| 401 Unauthorized | Missing, expired, malformed, or wrong-environment token. | Confirm the Authorization Bearer header, token flow, environment, and application credentials. Never paste secrets into public logs or support posts. |
| 403 Forbidden | The application or method may not have the required production eligibility, or the request may not meet access requirements. | Review the Buy API release conditions and the method’s current requirements. Ask eBay about eligibility; do not try to evade the restriction. |
| 400 Bad Request | Unsupported query parameter, invalid value, or malformed request. | Compare the request with the endpoint reference. Remove optional parameters one at a time and validate encoding for spaces and special characters. |
| 429 or quota-related response | The application exceeded a method-specific call limit or another request constraint. | Check the current API call limits for the exact product, reduce redundant searches, use bounded backoff where appropriate, and investigate the Application Growth Check if justified. |
| Empty results | The query is too narrow, marketplace context differs, or no matching items are available. | Check the marketplace header and query encoding. Try a broader legitimate query and inspect the documented response fields. |
| Unexpected or missing fields | Search summaries do not include every detail, or the response shape differs from assumptions. | Use the documented item resource where appropriate. Parse optional fields defensively and avoid relying on undocumented HTML fields. |
| Timeouts or intermittent failures | Network conditions, transient service responses, or an overly aggressive timeout. | Set a bounded timeout, retry only appropriate transient errors with capped exponential backoff and jitter, and avoid duplicate work when retrying. |
Keep an operational record of method, status, latency, retry count, and request correlation information where eBay provides it. Redact authorization headers and personal data. A retry loop should be bounded: retrying every failure can worsen quota pressure and conceal a persistent configuration problem.
8. ScreenshotNeo for authorized visual captures
If you need the page image rather than structured listing data, [ScreenshotNeo](https://screenshotneo.com) is a website screenshot API and MCP server. It makes one GET request for a URL and returns PNG, JPEG, WebP, or PDF. Use it only for pages you are authorized to capture; it is not an eBay data API and does not grant permission to automate access to eBay.

Its capture options include full-page shots with lazy images loaded, CSS-selector element capture, device and viewport presets, retina scale, dark mode, custom CSS and JavaScript, selector or network-idle waits, request blocking, headers and cookies, and caching with a chosen TTL. The MCP server offers take_screenshot, get_page_info, and capture_pdf for Claude, Cursor, or another MCP client. See the [ScreenshotNeo documentation](https://screenshotneo.com/docs/) for request parameters and setup.
Or skip the browser setup
curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -o shot.webp
Replace the example URL with a page you are allowed to capture. Python and Node.js examples, plus all request options, are in the ScreenshotNeo docs. Cookie banners, popups, and chat widgets are removed before the shot; bot checks, blank pages, and failed loads are never billed; an MCP server lets AI agents take screenshots; and 1,000 screenshots a month are free with no card. Paid plans start at $5 for 3,000 screenshots. Sign up for free.
9. Practical alternatives and cost considerations
For eBay listing data, the primary route in this guide is the official Browse API, subject to approval, quotas, and its data-use terms. If it does not meet your requirements, investigate whether eBay can grant express permission for the access you need. For your own seller listings, seller-owned exports may be an option to investigate; confirm what eBay makes available to your account and what terms govern it. These are avenues to check, not guarantees of access or particular export features.
Budget engineering time as well as API usage: token management, production eligibility, quota monitoring, schema handling, and compliance review all matter. Avoid designing around a quota until you have verified it for your method. Keep the integration narrow, fetch details only when needed, and review policy and endpoint documentation again before expanding to new marketplaces or data uses.
If you publish editorial links to listings or search results, eBay Partner Network is a separate program. Publishers can apply, and approved publishers can create trackable links subject to the program agreement and approved promotional methods. Affiliate participation does not authorize scraping. Review the [EPN overview](https://www.ebay.com/help/terms-conditions/default/ebay-partner-network-epn-affiliate-programs?id=4662) and [network agreement](https://partnernetwork.ebay.com/page/network-agreement), including promotion and privacy conditions, before using links commercially.
10. FAQ
Can I scrape public eBay listings at a low rate?
The current US agreement requires prior express permission for automated access using scrapers and similar tools. A low rate does not establish that permission. Check the agreement that applies to your market.
Does the Browse API let me collect any data for any purpose?
No. API availability, quotas, licensing, and downstream use conditions still apply. Check production eligibility and the current terms for your intended display, storage, or redistribution.
Can I use an affiliate link instead of API access?
No. EPN concerns approved promotional links and program conditions; it is separate from authorization to automate access or collect listing data.
Can ScreenshotNeo extract prices and titles?
ScreenshotNeo returns visual captures or PDFs. Use eBay’s documented data API for structured listing information, subject to access and use conditions.
Sources and date scope
- eBay Browse API and item summary search method.
- Buy APIs overview and API call limits.
- eBay US User Agreement, and its guest-checkout browse/search requirements.
- eBay Partner Network overview and network agreement.
Research date: September 29, 2026. Policy, endpoint availability, quotas, and terms can change. Confirm the current documentation and the agreement applicable to your location before implementation.

