How to Scrape eBay Best Sellers in Multiple Geographic Locations

Tutorial on how to scraper eBay best seller in multiple Geographic locations

While eBay doesn’t have a dedicated “Best Sellers” page, we can scrape their “Top Selling Items” page, which provides a good representation of popular products. 

In this guide, I’ll show you how to:

  • Scrape data from eBay’s top-selling items page
  • Get localized data across various countries showcasing how product popularity varies by location
  • Use ScraperAPI to bypass eBay’s bot blockers and change our IP location
Get Consistent eBay Data

ScraperAPI lets you scrape eBay product data without getting blocked—no complicated setups or workarounds.

TL;DR: Scraping eBay’s Best Sellers From Multiple Locations

This tutorial uses Python and ScraperAPI to scrape eBay’s top-selling items across multiple countries. We’ll use ScraperAPI’s extensive geotargeting features to gather data from different countries. We also use BeautifulSoup for parsing and ScraperAPI’s render instruction set to handle dynamic content.

import requests
from bs4 import BeautifulSoup
import json

api_key = 'YOUR_SCRAPERAPI_KEY'
url = 'https://api.scraperapi.com/'
target_url = 'https://www.ebay.com/shop/top-selling-items?_nkw=top+selling+items'

config = [{
    "type": "loop",
    "for": 3,
    "instructions": [
        {
            "type": "scroll",
            "direction": "y",
            "value": "bottom"
        },
        {
            "type": "wait",
            "value": 5
        }
    ]
}]

# Convert the configuration to a JSON string
config_json = json.dumps(config)

# Construct the instruction set for Scraper API
headers = {
    'x-sapi-api_key': api_key,
    'x-sapi-render': 'true',
    'x-sapi-instruction_set': config_json
}

def scrape_ebay_bestsellers(country_code):
    print(f"Starting Scraper for country code: {country_code}...")
    
    payload = {'url': target_url, 'country_code': country_code}
    response = requests.get(url, params=payload, headers=headers)
    
    soup = BeautifulSoup(response.text, "lxml")
    
    result_list = []
     
    # Find all product items on the page
    listings = soup.find_all("div", class_="s-item__info clearfix")
    images = soup.find_all("div", class_="s-item__wrapper clearfix")
     
    for listing, image_container in zip(listings, images):
        title_element = listing.find("div", class_="s-item__title")
        price_element = listing.find("span", class_="s-item__price")
        product_url_element = listing.find("a")
        product_status_element = listing.find("div", class_="s-item__subtitle")
        image_element = image_container.find("img")
        
        # Check if elements exist
        if title_element and price_element and product_url_element and image_element:
            title = title_element.text.strip()
            price = price_element.get_text(strip=True)
            link = product_url_element["href"]
            status = product_status_element.text.strip() if product_status_element else "No status available"
            image_url = image_element["src"]

            result_dict = {
                "title": title,
                "price": price,
                "image_url": image_url,
                "status": status,
                "link": link,
            }
            result_list.append(result_dict)
        else:
            continue
     
    # Dump the result_list into a JSON file
    output_json_file = f'ebay_results_{country_code}.json'
    with open(output_json_file, 'w', encoding='utf-8') as json_file:
        json.dump(result_list, json_file, ensure_ascii=False, indent=4)
    
    print(f"Results for country code {country_code} have been dumped into {output_json_file}")

if __name__ == "__main__":
    country_codes = ["us", "uk", "eu", "za", "au"]
    for code in country_codes:
        scrape_ebay_bestsellers(code)

Note: Replace 'YOUR_SCRAPERAPI_KEY' with your actual ScraperAPI key, or set it in your .env file.

Related Tutorials:

Prerequisites

To follow along with this guide, we’ll rely on a couple of Python modules to help us fetch and parse eBay data, which you can install using the command below:

pip install beautifulsoup4 requests lxml

Note: You do not have to install json because it is a Python built-in package.

In addition to the Python setup, you’ll also need a ScraperAPI account. If you don’t already have one, sign up here and get 5000 free scraping credits. In your ScraperAPI dashboard, you’ll find your API key so keep this handy.

Creating a free ScraperAPI account on ScraperAPI page

Make sure to replace 'YOUR_SCRAPERAPI_KEY' in the code with your actual ScraperAPI key when you’re ready to run the script.

Understanding eBay’s Top Selling Items Page

Before writing your script, It’s important to understand the structure and behavior of eBay’s Top Selling Items page. 

While eBay doesn’t provide a dedicated “Best Sellers” page, the Top Selling Items page showcases popular products based on sales and user engagement.

Top seller items from eBay

This page employs dynamic content loading, meaning that as you scroll down, new items are loaded via JavaScript. To effectively scrape all available products, we need to simulate this scrolling behavior and render JavaScript content. 

ScraperAPI’s Render Instruction Set, allows you to process JavaScript and automate page interactions. This means you can simulate user actions like entering a search term, clicking a button, or scrolling through content, all within your scraping workflow.

We’ll get some of the following details from this page:

  • Product name
  • Price
  • Product image
  • A brief product description
  • The product URL

Now that we know what information we’re interested in, it’s time to build our scraper.

Step 1: Importing Libraries and Setting Up Variables

Let’s start by importing the necessary Python libraries and set up our API key along with the target URL.

import requests
from bs4 import BeautifulSoup
import json

api_key = 'YOUR_SCRAPERAPI_KEY'
url = 'https://api.scraperapi.com/'
target_url = 'https://www.ebay.com/shop/top-selling-items?_nkw=top+selling+items'

We import requests for handling HTTP requests, BeautifulSoup for parsing HTML content, and the built-in json module for working with JSON data.

Note: Remember to replace 'YOUR_SCRAPERAPI_KEY' with your actual ScraperAPI key. 

Step 2: Configuring ScraperAPI with Render Instruction Set

To handle dynamic content on eBay, we’ll use ScraperAPI’s render instruction set. We’ll set up an instruction set to scroll the page and wait for content to load:


  config = [{
    "type": "loop",
    "for": 3,
    "instructions": [
        {
            "type": "scroll",
            "direction": "y",
            "value": "bottom"
        },
        {
            "type": "wait",
            "value": 5
        }
    ]
}]

# Convert the configuration to a JSON string
config_json = json.dumps(config)

# Construct the instruction set for ScraperAPI
headers = {
    'x-sapi-api_key': api_key,
    'x-sapi-render': 'true',
    'x-sapi-instruction_set': config_json
}

This instruction set tells ScraperAPI to scroll to the bottom of the page three times, waiting 5 seconds between each scroll. This ensures that we capture all dynamically loaded content. 

We define a config variable with the render instruction set,  then convert this configuration to a JSON string using json.dumps(config) and include it in the headers along with our API key and the instruction to render JavaScript:

  • The x-sapi-api_key includes your ScraperAPI key for authentication
  • x-sapi-render enables JS rendering
  • x-sapi-instruction_set header provides detailed instructions, telling ScraperAPI to scroll down the page five times, pausing for five seconds each time.

Step 3: Defining the Scraping Function

Now we define our main scraping function, scrape_ebay_bestsellers, which takes a country_code as an argument to scrape data specific to that region.

def scrape_ebay_bestsellers(country_code):
    print(f"Starting Scraper for country code: {country_code}...")
    
    payload = {'url': target_url, 'country_code': country_code}
    response = requests.get(url, params=payload, headers=headers)
    
    soup = BeautifulSoup(response.text, "lxml")
    
    result_list = []

This function starts by sending a GET request to ScraperAPI with our target URL and country code for geotargeting. We use the requests.get() method, passing our ScraperAPI URL, the payload (which includes the target eBay URL and country code), and our headers (which include the API key and render instructions).

The response is then parsed using BeautifulSoup with “lxml” and finally we initialize an empty result_list to store our scraped data.

Step 4: Parsing and Extracting Data

Now, we’ll parse the HTML content to extract product details such as the title, price, image URL, status, and link. We use BeautifulSoup’s find_all() method to locate all product listings and their corresponding image containers on the page, using their respective CSS class names. We’ll then extract the relevant data from each listing.

# Find all product items on the page
    listings = soup.find_all("div", class_="s-item__info clearfix")
    images = soup.find_all("div", class_="s-item__wrapper clearfix")
     
    for listing, image_container in zip(listings, images):
        title_element = listing.find("div", class_="s-item__title")
        price_element = listing.find("span", class_="s-item__price")
        product_url_element = listing.find("a")
        product_status_element = listing.find("div", class_="s-item__subtitle")
        image_element = image_container.find("img")
        
        # Check if elements exist
        if title_element and price_element and product_url_element and image_element:
            title = title_element.text.strip()
            price = price_element.get_text(strip=True)
            link = product_url_element["href"]
            status = product_status_element.text.strip() if product_status_element else "No status available"
            image_url = image_element["src"]

            result_dict = {
                "title": title,
                "price": price,
                "image_url": image_url,
                "status": status,
                "link": link,
            }
            result_list.append(result_dict)
        else:
            continue

In this part of the function, we iterate through each product listing and its corresponding image container using the zip() function. For each product, we use BeautifulSoup’s find() method to locate specific elements containing the title, price, product URL, status, and image URL.

We then check if all necessary elements exist. If they do, we extract the text content or attribute values as needed, using methods like text.strip() for text content and accessing attributes directly (e.g., ["href"] for the link).

We create a dictionary (result_dict) for each product with the extracted data and append it to our result_list. If any required element is missing, we skip that product and continue to the next one.

Step 5: Saving the Extracted Data

After extracting the data, we’ll save the results to a JSON file named according to the country code.

# Dump the result_list into a JSON file
    output_json_file = f'ebay_results_{country_code}.json'
    with open(output_json_file, 'w', encoding='utf-8') as json_file:
        json.dump(result_list, json_file, ensure_ascii=False, indent=4)
    
    print(f"Results for country code {country_code} have been dumped into {output_json_file}")

Here, we’ll create a filename that includes the country_code to distinguish between different regions. Using json.dump, we write the result_list to the file with indentation and a confirmation message is printed upon successful completion.

Step 6: Executing the Scraper for Multiple Countries

Finally, we’ll run the scraping function for a list of country codes to gather data from multiple geographic locations.

if __name__ == "__main__":
    country_codes = ["us", "uk", "eu", "za", "au"]
    for code in country_codes:
        scrape_ebay_bestsellers(code)

By checking if __name__ == "__main__", we ensure that the script runs only when executed directly. 

Geotargeting with ScraperAPI

ScraperAPI’s geotargeting feature allows us to easily scrape data from different countries. By specifying the country_code parameter in our request, we can retrieve location-specific results. Here’s how it works:

  • For specific countries like “us“, “uk“, “za“, and “au“, ScraperAPI uses a proxy from that country.
  • When using “eu“, ScraperAPI selects a proxy from a random European country.

This feature is particularly useful for market research, allowing you to compare product popularity and pricing across different regions.

Note: For more information on geotargeting with ScraperAPI, you can refer to the official documentation.

Full eBay Best Sellers Scraping Code

Now that the groundwork has been laid, and all the necessary components are in order, let’s piece together the complete scraping code.

import requests
from bs4 import BeautifulSoup
import json

api_key = 'YOUR_SCRAPERAPI_KEY'
url = 'https://api.scraperapi.com/'
target_url = 'https://www.ebay.com/shop/top-selling-items?_nkw=top+selling+items'

config = [{
    "type": "loop",
    "for": 3,
    "instructions": [
        {
            "type": "scroll",
            "direction": "y",
            "value": "bottom"
        },
        {
            "type": "wait",
            "value": 5
        }
    ]
}]

# Convert the configuration to a JSON string
config_json = json.dumps(config)

# Construct the instruction set for Scraper API
headers = {
    'x-sapi-api_key': api_key,
    'x-sapi-render': 'true',
    'x-sapi-instruction_set': config_json
}

def scrape_ebay_bestsellers(country_code):
    print(f"Starting Scraper for country code: {country_code}...")
    
    payload = {'url': target_url, 'country_code': country_code}
    response = requests.get(url, params=payload, headers=headers)
    
    soup = BeautifulSoup(response.text, "lxml")
    
    result_list = []
     
    # Find all product items on the page
    listings = soup.find_all("div", class_="s-item__info clearfix")
    images = soup.find_all("div", class_="s-item__wrapper clearfix")
     
    for listing, image_container in zip(listings, images):
        title_element = listing.find("div", class_="s-item__title")
        price_element = listing.find("span", class_="s-item__price")
        product_url_element = listing.find("a")
        product_status_element = listing.find("div", class_="s-item__subtitle")
        image_element = image_container.find("img")
        
        # Check if elements exist
        if title_element and price_element and product_url_element and image_element:
            title = title_element.text.strip()
            price = price_element.get_text(strip=True)
            link = product_url_element["href"]
            status = product_status_element.text.strip() if product_status_element else "No status available"
            image_url = image_element["src"]

            result_dict = {
                "title": title,
                "price": price,
                "image_url": image_url,
                "status": status,
                "link": link,
            }
            result_list.append(result_dict)
        else:
            continue
     
    # Dump the result_list into a JSON file
    output_json_file = f'ebay_results_{country_code}.json'
    with open(output_json_file, 'w', encoding='utf-8') as json_file:
        json.dump(result_list, json_file, ensure_ascii=False, indent=4)
    
    print(f"Results for country code {country_code} have been dumped into {output_json_file}")

if __name__ == "__main__":
    country_codes = ["us", "uk", "eu", "za", "au"]
    for code in country_codes:
        scrape_ebay_bestsellers(code)

Note: Replace 'YOUR_SCRAPERAPI_KEY' with your actual ScraperAPI key.

Analyzing the Scraped eBay Best Sellers Results

After running the script, you’ll have JSON files for each country. You can analyze these files to compare top-selling items across different regions. Keep in mind that the “eu” country code will use a random European proxy, so results may vary between runs.

Let’s look at sample results from each region:

US Results

[
  {
    "title": "MFK- Baccarat Route 540 (ORIGINAL) 2ML Sample",
    "price": "$17.00",
    "image_url": "https://i.ebayimg.com/images/g/drIAAOSwGkNjLIqg/s-l500.webp",
    "status": "Brand New",
    "link": "https://www.ebay.com/itm/165688814437?_skw=top+selling+items&itmmeta=01J84YCXKB3AYS377VVE5G0S8K&hash=item2693d2ab65:g:drIAAOSwGkNjLIqg&itmprp=enc%3AAQAJAAAA8HeiGDgIPEom89sRrPuXPklfX9lT%2BlUAHIGs5La4FEKTK0KVuUkGxjJ9HyTXGUTZ%2FATXCPytz1GBYeXiBIyIG6cI3cpdZCS5IMNppD1RoVXVv8nc5ENB9jjzJ5T6AuxqeysjR6TANMeKYLMidvUFAg99%2BAUdh2DO3D35%2F4CvhyVhHcX%2Fw7ypfZFtS%2F70opYu72bYvdMy12ocOYYnH2gHYeGTzYI7SZDWx3E0kVHgmwsfHG3uK1aLJwa3bovwDm4dA8d5pIKuUhtHcudVgV4A3bsTVg42JiaQfj6GpMeQp8V2tcrSVU5iuZTmUGaksGpleA%3D%3D%7Ctkp%3ABk9SR_LZs57BZA"
  },
  {
    "title": "PlayStation 5 Console (God of War Ragnarök Bundle)",
    "price": "$499.99",
    "image_url": "https://i.ebayimg.com/images/g/xz8AAOSwt1JmOwiH/s-l500.webp",
    "status": "Brand New",
    "link": "https://www.ebay.com/itm/296246887870?_skw=ps5&epid=10064168267&itmmeta=01J87YWSJNVFDR90EY02X6V70G&hash=item44f9b0c5be:g:xz8AAOSwt1JmOwiH&itmprp=enc%3AAQAJAAAAwHoV3kP08IDx%2BKZ9MfhVJKm5BDCChed582%2FCMNOT4qPZHUJXGccHfamNQ0UIIjiXGOoWAy47CWUivJY%2Bq3d6qPAVjxYEiINNHhK3bNQb4t%2FMofzEKT%2FGFQ1xu%2F2LU07GgfEU6BCvtZ1jRzaguFekU22hzzMXW%2FuJt9hwcPqpWYyMxFE4c4lGCrrH%2FgLVCIECkfqJpui%2FcHHd24DfhUoQW0RmEs3w7HEIIH5RzBbJSUGn2pc6miejVNrGE%2B%2FpnGfXMg%3D%3D%7Ctkp%3ABk9SR7SZ8_7BZA"
  }
]

In the US, electronics like the PlayStation 5 and high-end luxury items such as perfume samples dominate the top-seller list. Prices are listed in USD, reflecting a tech-heavy consumer preference.

UK Results

[
  {
    "title": "Top Selling Item - 3 X LEARNER DRIVER Safety Signs Fluorescent Fully Magnetic",
    "price": "£33.02",
    "image_url": "https://i.ebayimg.com/images/g/FwMAAOSwK8VhXyQj/s-l500.webp",
    "status": "Brand New",
    "link": "https://www.ebay.com/itm/275819269649?_skw=top+selling+items&itmmeta=01J873B8AFNHK8VZRDT2DWG0SW&hash=item40381c0e11:g:FwMAAOSwK8VhXyQj&itmprp=enc%3AAQAJAAAA8HeiGDgIPEom89sRrPuXPknU7QscT0PSf7bke9vKEErttv2wcD0qS6dfMdklBv1kziuabFT5GFcSwPbtFOXpQu3rFRy0ejfy6XBhYep6zFx1pe7hxiK%2BEVI8lJDTOgsr4oTTwqJRWkJWCns4LrLcuNcKuljqHq8m2y1hT%2FIKX0to5OqympIGmVf3M3mTQW8WOCH4ENbW1Mwc4k%2FUnJhGZ%2BivAt%2FLQKqIoWE0eGb8gPihGKA0BcP1kiJ8ptTmxS4M3LLKMiREWwYAC803pOBV195pQI12OtSlvOFKAMxOJb%2Fla1IG5QnHXStGRXSxcNrz%2Bg%3D%3D%7Ctkp%3ABk9SR8KFrePBZA"
  },
  {
    "title": "Next Ladies Tops Size 18 - 2 to sell",
    "price": "£6.59",
    "image_url": "https://i.ebayimg.com/images/g/AEoAAOSwD0pmgV-v/s-l500.webp",
    "status": "New (Other) · NEXT · Size:18",
    "link": "https://www.ebay.com/itm/305732309702?_skw=top+selling+items&itmmeta=01J873B8AFSJSQGC1QBADNJGVW&hash=item472f10d2c6:g:AEoAAOSwD0pmgV-v&itmprp=enc%3AAQAJAAAA8HeiGDgIPEom89sRrPuXPklW%2FdrqDQuTU4OFdUhiGbnHPpiD0iqxUNsD%2FLcM29wDVmCeRcEtYR3lvQBQ6DoHL4tK3RMQ4%2FtSl1hD5fUVcmMQJ%2BhUL6BGAKPU4Fn2ncmGE1kcMoWBfmT992boaUzUy1%2BmTyAPYMvoEAMXXdjqDYxU%2FVH7KGRJhJ2064ABwbbYsdHLNVqTPuujWpz%2BqxuLAcjm4C%2FwfLUULydX8cWFVdpwNqjOA%2B9O8uf9xre%2FtFgGzFS%2B8s5sej3aFe7LTUbLN4CjS2Qx8mH88wwCugWdRJNNxLbJTw2jtM--2rYwmHJDFg%3D%3D%7Ctkp%3ABk9SR8SFrePBZA"
  }
]

UK results show a focus on practical items such as learner driver signs and budget clothing, with prices in GBP. These results emphasize affordability and utility.

EU Results

[
  {
    "title": "Top Selling Mens Suede Shirt Soft Suede Brown Leather Custom Made Shirt MLJ-1108",
    "price": "€132.46",
    "image_url": "https://i.ebayimg.com/images/g/7hMAAOSw1K5mOckN/s-l500.webp",
    "status": "Brand New",
    "link": "https://www.ebay.com/itm/266966151912?_skw=top+selling+items&itmmeta=01J84ZGXXMS3FNEVZRM3397R7G&hash=item3e286c32e8:g:7hMAAOSw1K5mOckN&itmprp=enc%3AAQAJAAAA8HeiGDgIPEom89sRrPuXPkkivj0RMvHq885QPFQ95y9n6XtLdWep0nWpObDWguiRqXrXm%2BI751EziGUyPBexurQPHvDCIbnci0hn01n6KU%2FOCYKLIXApFkBkz663tvF%2BOP0q47cCOZHpmAo5y4bex7b%2B84u1Myp%2BxQbTav%2B%2FY%2Fl49pH89ZxKRbGmo5UpriBLwjsQxvnU%2FVMZw6uz8zRH2xB3k4%2BQgUnn69ARNXARI2b%2BFpR%2ByQVEfY9wzALP0oF3qXaNp0ZK5VWvycgP%2BL2Ow2GmZdoYZ%2F22g7rPH%2Bj6zm%2FNpH7fyHbEPmjyHFMKIKF4Eg%3D%3D%7Ctkp%3ABFBMgt_Dn8Fk"
  },
  {
    "title": "Top Quality 8A* 14''-24\" Tape-In Russian Remy Human Hair Extensions Sell 1st UK",
    "price": "€36.99to€99.09",
    "image_url": "https://i.ebayimg.com/images/g/yfQAAOSwXYpdBIQG/s-l500.webp",
    "status": "Brand New",
    "link": "https://www.ebay.com/itm/265518789089?_skw=top+selling+items&itmmeta=01J84ZGXXMMZ4873XPW6MM8N8C&hash=item3dd22731e1:g:yfQAAOSwXYpdBIQG&itmprp=enc%3AAQAJAAAA8HeiGDgIPEom89sRrPuXPkmOCMdoCUdzFjI2ROmRSp2fXMBTbYpdX4wvf2SM7tYSIvdTTrVDZ7S7Tys9iT5XTfJ%2BfxPjes3KrvEgPNZuPAMhvJZvbngKrwhhHXNblpxTaW6hrGBW86M2oRnceZj2fF106TkQNJM9mX61VEhsOaN%2FF99lKao1RAQD4RRjgvl8tV%2Fat%2B6BTPRlA%2BpOBXNgpd%2Bd4pguSxcsHxsrf0l9PCz6kL4tixT0w9UINOv0koI2G2muM6%2BKz1ExTFxtgR54GNVoa0K%2F%2BPkTWe85yfDoDY5bYp9nisewWxv%2BTeAFwxECQA%3D%3D%7Ctkp%3ABFBMgt_Dn8Fk"
  }
]

In Europe, we see premium clothing and beauty products trending, with prices in euros. 

ZA (South Africa) Results

[
  {
    "title": "TOP GRADE SELLING 657.00 CTS NATURAL 2 LINE BLUE SAPPHIRE ROUND BEADS NECKLACE",
    "price": "R13.50",
    "image_url": "https://i.ebayimg.com/images/g/LXsAAOSwu-BWQb2Y/s-l500.webp",
    "status": "New (Other)",
    "link": "https://www.ebay.com/itm/362401536940?_skw=top+selling+items&itmmeta=01J873DQ8K1AKZTZKAH8XZFPPE&hash=item5460d09bac:g:LXsAAOSwu-BWQb2Y&itmprp=enc%3AAQAJAAAA8HeiGDgIPEom89sRrPuXPkmcji5YU%2Fj6RNe5Y2o0TrHBXEP%2Btw%2BOAcIC1XdxH6x5F4lpfMdbEZNRWr43dp4K4zt77U8AswtKVYEkiFWy%2Fu7r2lIlfA%2F2%2F1ILxfUEOr6tnrVXVMym8ujiqWVN1KWgRXayC9%2BWElkBVpPbhe49Tj%2FXZQj5NnhavsgLzl8Vk7bfn%2BS5Pvxb0PygXcwNqhe7Bv8Hvtx47t9vWwdF9jjcpmG8YyVImAe8oC6pBZKTy%2Ft%2Fv9DPkTKV%2F7CoiWD86n%2FcFs4H08YDLmuyjQZK2Cd7viUXQjiIiXpZkmhN%2Bu32sH44YQ%3D%3D%7Ctkp%3ABk9SR7z0tuPBZA"
  },
  {
    "title": "TOP SELLING New Men's Green Suede Shirt 100% Real Lambskin Causal Wear Shirt",
    "price": "R159.99",
    "image_url": "https://i.ebayimg.com/images/g/abQAAOSwsvhlM~Ng/s-l500.webp",
    "status": "Brand New",
    "link": "https://www.ebay.com/itm/166389191783?_skw=top+selling+items&itmmeta=01J873DQ8KDYMVWFH7YP3KH5KT&hash=item26bd919467:g:abQAAOSwsvhlM~Ng&itmprp=enc%3AAQAJAAAA8HeiGDgIPEom89sRrPuXPknfpwRhCAcf7WhdkXaZUtBU%2B9bSjbfCTDC7oGyCskOh8A%2B3GyrgTMfQxUKj6vJsZmKBu4oGan%2Ff0HDdOV7cUSve5dLXwI%2Fgwp72hbwgpD%2Btsh%2FVUvi55vtRMODGkF%2FsIH8j4vyDdm5nh5OWlW3Zx4BctcmjuZPXMLC2p%2F2jLGZ%2FRpWMBWhZssYO7xh67KZYBV5cDbRsljqJN3VWsS1fI0OzJOyJeUS04L%2B9deFO93yyqNqUYNDTTQyFF1ygihMXcfNUqngFpzKO5j%2FGTYqpL5EHsnrjUIJBXn46xKeqH5z88Q%3D%3D%7Ctkp%3ABFBMvPS248Fk"
  }
]

South African results feature jewelry and clothing, with prices in South African Rand (ZAR). Affordable luxury appears to be a common theme here.

AU (Australia) Results

[
  {
    "title": "AIRS INCENSE FRESH DIPPED 100 STICKS Choose from 20 top selling AIRS Aromas",
    "price": "$11.76",
    "image_url": "https://i.ebayimg.com/images/g/MakAAOSwW9RhQBdI/s-l500.webp",
    "status": "New (Other)",
    "link": "https://www.ebay.com/itm/284276840507?_skw=top+selling+items&itmmeta=01J873F1NVENME2XA654G1G9YG&hash=item423038583b:g:MakAAOSwW9RhQBdI&itmprp=enc%3AAQAJAAAA8HeiGDgIPEom89sRrPuXPkmyFC0Gzxx8yFwt9Mg41Jprss0O1hn2A4N7ZVtLIhz%2FnbxNKiJ4JLMek37YggagnyUVaQIvE0K6RijJrjLDS2inWY9QxZKZxyfoVGYkVkWT5iaPdgOJQl7etiSxcZWnUPRk1HTy523m04aVf68uMhfrK0r8C3JQBpucTNveUSalpYFK2uV27Gf3TPpoWb1oXlUSnYK9452WOX%2FdP1SGTIh%2BtyvHvYOReS56gWHc012VGlrFky1CwZC1n%2FOnhrAgDWSvcKQnqvHhT04pzHxhz2Bhnvu28I2IiHUxwkGJ7naHQg%3D%3D%7Ctkp%3ABk9SR5SbvOPBZA"
  },
  {
    "title": "Natural Ice Seed Top selling Tian Shan Cui Ping An Buckle Pendant Floating Flower",
    "price": "$8.11",
    "image_url": "https://i.ebayimg.com/images/g/hwwAAOSwfq9mtbp1/s-l500.webp",
    "status": "New (Other)",
    "link": "https://www.ebay.com/itm/395585091542?_skw=top+selling+items&itmmeta=01J873F1NVAK3CK7SVJTD5DCNN&hash=item5c1ab577d6:g:hwwAAOSwfq9mtbp1&itmprp=enc%3AAQAJAAAA8HeiGDgIPEom89sRrPuXPkninkXYcUBXVq7aSvRhD2%2FgHhWqTbS4FA5OdJbHwjEsq%2BhVLaazk%2BJ%2FY9C8UNrAFwTf8CQOQj9GEJ1Y9m2LxDtyNuVo98v%2Bp8L2WM%2Bcu3hrWgmZm%2FYnA7YUCjmqZzxVp0J0qHzeDkaFqHyjEZdJv8AvGY5SZgd6OC8I8KN9IkoVBQhUsOhPZ3KcstfhzQxakKWmsZzpz9tvOyHkM%2FTbHd8SAUY38jQ25feL%2BBbKW5j9gPE52Lo%2F2cGWUp%2FfpuPm%2BVIHlYCk%2BhGYz%2BJddcAOBpMi%2FPC%2B%2FbpYclo2MK%2Bw1zVD9Q%3D%3D%7Ctkp%3ABk9SR5SbvOPBZA"
  }
]

In Australia, low-cost items like incense sticks and pendants lead the top-selling list, with prices listed in Australian dollars (AUD). The focus here seems to be on smaller, niche items.

These results highlight how top-selling items vary between regions, influenced by local preferences, pricing strategies, and market conditions.

Note: Remember that eBay’s top-selling items can change frequently, so it’s advisable to run your scraper regularly to keep up with the latest trends. 

Wrapping Up

This tutorial demonstrated how to scrape eBay’s top-selling items from multiple geographic locations using Python and ScraperAPI. This information provides valuable insights into market trends and can guide product launches and marketing strategies tailored to specific regions.

ScraperAPI takes the hassle out of scraping eBay or any other dynamic website. Sign up for ScraperAPI today to start scraping data from anywhere across the globe in just minutes!

eBay Best Sellers Scraping FAQs

While eBay offers APIs, they come with limitations. You often face an approval process and strict call limits. Plus, eBay’s APIs are prone to deprecation, making them unreliable for consistent scraping. ScraperAPI bypasses these hurdles by handling proxy management, CAPTCHA solving, and JavaScript rendering, ensuring you get the data you need without getting blocked.

ScraperAPI’s geotargeting allows you to access region-specific data by routing your requests through proxies in specific countries, enabling you to see how product popularity varies across different markets.

Web scraping is generally legal, but it’s essential to respect websites’ terms of service and robots.txt rules. Refer to our blog post Is web scraping Legal? to learn more.

No, you don’t need a headless browser to scrape eBay. With ScraperAPI’s new Render Instructions Set, you can handle dynamic content and complex scraping tasks effectively without needing to use a headless browser.

About the author

John Fawole

John Fawole

John Fáwọlé is a technical writer and developer. He currently works as a freelance content marketer and consultant for tech startups.

Table of Contents

Related Articles

Talk to an expert and learn how to build a scalable scraping solution.