Price comparison, 3 shopsDevelopment & Customization

A Python parser that compares prices for the same products in 3 open online shops in one table

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 compares prices for the same products in 3 open online shops in one table

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 puts the prices of the same products from up to three open online shops side by side: one row per product, with each shop's price, old price, stock and link, and the date of the check. The three shops come with Premium; Basic and Standard read one shop, as a start or a test. Products are matched by a code the shops show, such as a barcode or maker's part number, or by the links you list for each product: names alone differ too much to match safely. Send the sites, a product page of each saved from your browser and your product list. You get Python code, a settings file and a README and run it on your computer. It reads open pages at a polite pace, never logs in or gets around captchas or protection, and does not read Amazon or Google. You decide whether the shops' terms allow it; a later layout change 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.
  • One row per productEach shop's price, stock and link side by side
  • Matched by code or your linksBarcode, maker's part number, or links you list
  • Date of the checkIn every row, so runs can be compared
  • Polite paceA pause between pages, set in the settings
  • Runs on your computerWindows, macOS or Linux, with Python

How it works

  1. 1
    ShopsYou give the shops, saved product pages and your product list
  2. 2
    ParserWe write the code and the guide to running it
  3. 3
    RunYou run it and check a few rows in each shop
  4. 4
    ChangesYou ask for changes within your package and send any error message

What we need from you

The three shops (or one, for Basic and Standard) and a product page from each, saved from your browser (File > Save page as). Your product list with the code the shops show, such as a barcode, or a table with each product's link in every shop. The fields you need per shop, e.g. price, old price, in stock, link. Roughly how many products. CSV, Excel or JSON.

We will ask you:

  • Which shops?
  • How to match products
  • The fields per shop
  • How many products roughly?

Compare packages

PackagesBasicOne shop to start$21StandardOne shop, whole category$42Premium3 shops in one table$76
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

Why does only Premium compare 3 shops?

Each shop has its own pages, so each needs its own part of the code. Basic and Standard cover one shop, which is a good way to try it first.

What if a shop shows no barcode?

Then give us a table with each product's link in every shop. We do not match products by guessing from their names.

Can it include Amazon, Google Shopping or social network shops?

No. Amazon, Google, LinkedIn and social networks are out: their terms forbid it. For other shops you decide whether their terms allow it.

Can it compare delivery costs too?

Only when the product page shows it to any visitor. It never adds to a basket, fills in an address or logs in.

Did not find your answer?

Packages