Competitor price parserDevelopment & Customization

A Python parser that collects a competitor's public prices into a table: price, old price, stock and link

Usually ready in 15 minutesRevisions includedQuality check
Packages
Payment protectionDetails
  • Revisions within the package are free.
  • If you do not respond within 3 days of delivery, the work is accepted automatically.

The money is reserved when you pay and released only once you accept the work.

A Python parser that collects a competitor's public prices into a table: price, old price, stock and link

Example result

Example for the Standard package

Parser of a garden tools supplier's catalog into Excel

What the result looks like

ArticleNamePriceIn stockWeightPhoto
GT-1042Pruning shears, 20 mm18.90Yes0.24 kg…/gt-1042.jpg
GT-1187Folding saw, 210 mm24.50Yes0.31 kg…/gt-1187.jpg
GT-2210Hedge shears, wavy blade39.00No1.10 kg…/gt-2210.jpg
GT-3305Hand trowel, stainless9.80Yes0.18 kg…/gt-3305.jpg
GT-4120Garden hose 25 m, 1/2"42.00Yes2.90 kg…/gt-4120.jpg

The file in the example has 1,236 products from 52 list pages.

A part of the code

def product_links(list_url: str) -> Iterator[str]:
    """Product page links from every page of the list, following 'Next'."""
    url: str | None = list_url
    while url:
        page = fetch(url)
        for card in page.select("div.product-card a.title"):
            yield urljoin(url, card["href"])
        next_link = page.select_one("a.pagination-next")
        url = urljoin(url, next_link["href"]) if next_link else None


def fetch(url: str) -> BeautifulSoup:
    """One open page, at a polite pace: a pause between requests and a few tries on errors."""
    for attempt in range(3):
        time.sleep(settings.delay_seconds)
        response = session.get(url, timeout=30)
        if response.status_code == 200:
            return BeautifulSoup(response.text, "html.parser")
        log.warning("%s answered %s, try %d of 3", url, response.status_code, attempt + 1)
    raise ScraperError(f"{url} did not open after 3 tries")

Files: a ZIP archive with scraper.py, settings.ini (the start page, the pause between requests, the file name), requirements.txt and a README on installing and running it. It reads only open pages, one every 2 seconds, and checks the site's robots.txt first. The client runs it on their own computer.

Client: an online garden shop that resells a supplier's tools; the supplier has an open catalog on its website but no price list file. Task: go through the catalog's list pages, open every product page and save the article number, name, price, stock, weight and main photo link to Excel, to compare prices once a week.

The client and all details are made up.

About this service

This parser reads a competitor's public product pages and puts their prices into a table you can set against your own: product name, product code, price, old price, discount, in stock and link, with the date of the check. Give us the site, links to a category and to a product page, the fields in the order of your table and one or two of those pages saved from your browser. We write the code in Python by their real structure, with a settings file and a README. You run it on your computer whenever you want fresh prices, and the table comes straight to you. It reads only open pages at a polite pace and never logs in, gets around captchas or protection, or collects personal data. You decide whether the site's terms allow it, and a later change of its layout needs an update.

What is included

  • What you getA ZIP archive with the Python code, a settings file and a README with step-by-step instructions; the code is also shown on the order page.
  • Price columnsPrice, old price and discount as separate numbers
  • Codes for matchingThe competitor's code or barcode, when the page shows it
  • Date of each checkEvery row carries the date it was collected
  • Polite paceA pause between pages that you set
  • Runs on your computerWindows, macOS or Linux; run it again for fresh prices

How it works

  1. 1
    PagesYou give the competitor's site, a category and a saved product page
  2. 2
    ParserWe write the code by those pages and the guide to running it
  3. 3
    RunYou run it and compare the first rows with the site
  4. 4
    ChangesYou ask for changes within your package and send any error message

What we need from you

The competitor's site and the exact pages: a link to a category and to a product page, and roughly how many products there are. The fields you need in the order of your table, e.g. name, code, price, old price, in stock, link. One or two of those pages saved from your browser as HTML (File > Save page as) or screenshots. CSV or Excel, and where you will run it.

We will ask you:

  • Which competitor site and pages?
  • The fields you need
  • How many products roughly?
  • How often will you run it?

Compare packages

PackagesBasicPrices from product pages$21StandardA whole category$42PremiumUp to 3 competitors$75
Deadline1 day2 days3 days
Revisions123
Sites11up to 3
Kinds of page12 (category and product)up to 3
Fieldsup to 10up to 25up to 25 on each
Goes through the pages of a listNoYesYes
Results fileCSVExcel or CSVExcel, CSV or JSON
Duplicates removed, resumes where it stoppedNoNoYes
Order BasicOrder StandardOrder Premium

Payment protection

You pay when you order, but the money is released only for accepted work.

  • Fixed priceThe package price does not change after you pay.
  • The money is reservedWhen you pay, the amount is only reserved. It is released to the service once you accept the work.
  • Checked before deliveryEvery result goes through a quality check before it reaches you, and you see it on the order page before accepting it.
  • Free revisionsAsk for changes within your brief as many times as the package allows.
  • Acceptance after 3 daysIf within 3 days of delivery you neither accept the work nor ask for changes, it is accepted automatically. If you write in the order chat after delivery, the order waits; once we answer, we may start the 3 days again and will say so in the chat.
  • Redo or a full refundIf the result does not match your brief and the revisions did not fix it, or the work takes more than twice its deadline, write in the order chat: we will redo the work or refund the payment in full.
How it works →

Questions and answers

Will it match the competitor's products with mine?

It saves the competitor's code, barcode and name as the page shows them, so you can match them with your list in Excel. If the codes differ from yours, the matching is yours to do: we do not guess which products are the same.

Can it see prices for logged-in or wholesale buyers?

No. It reads the prices an open page shows to any visitor. Prices behind an account, a wholesale login or a captcha stay out of reach.

Is it allowed to collect a competitor's prices?

Collecting public prices is allowed in many cases, but sites' terms and data laws differ between countries, so you decide whether you may collect and use them. The parser never logs in, gets around protection or collects personal data.

Can it collect prices from Amazon, Google or shops inside social networks?

No. Their terms forbid it, and the same goes for LinkedIn and other social networks. For such data, use the official export or API of the service.

What if the competitor changes the site?

The parser follows the pages as they are now. After a change of layout it needs an update, which is a new order. If the site limits visits, the parser does not get around it.

Did not find your answer?

Packages