DevelopmentPayment 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.

Example result
Parser of a garden tools supplier's catalog into Excel
What the result looks like
| Article | Name | Price | In stock | Weight | Photo |
|---|---|---|---|---|---|
| GT-1042 | Pruning shears, 20 mm | 18.90 | Yes | 0.24 kg | …/gt-1042.jpg |
| GT-1187 | Folding saw, 210 mm | 24.50 | Yes | 0.31 kg | …/gt-1187.jpg |
| GT-2210 | Hedge shears, wavy blade | 39.00 | No | 1.10 kg | …/gt-2210.jpg |
| GT-3305 | Hand trowel, stainless | 9.80 | Yes | 0.18 kg | …/gt-3305.jpg |
| GT-4120 | Garden hose 25 m, 1/2" | 42.00 | Yes | 2.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
When a supplier shows its range on an open site but sends no file, this parser copies the catalogue into a table your shop can import: name, code, price, description, specs, category and photo links, and it saves the photos to a folder. Send the supplier's site, links to a category and a product page, one or two pages saved from your browser and your shop's import template, for example a Shopify or WooCommerce CSV, so the columns follow it. You get Python code with a settings file and a README and run it on your computer. Use only photos and texts the supplier lets you use. It reads 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; 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.
- Columns for your importIn the order and with the names of your shop's import file
- Photos ready to loadPhoto links in a column and files named by product code
- Prices as shownThe supplier's price; your markup you add in the table
- Polite paceA pause between pages, set in the settings
- A plain guideWhat to install and how to run it, step by step
How it works
- 1CatalogueYou give the supplier's pages and your import template
- 2ParserWe write the code and the guide to running it
- 3Test importYou run it and import the first rows into your shop
- 4ChangesYou ask for changes within your package and send any error message
What we need from you
The supplier's site: a link to a category and to a product page, and roughly how many products there are. Your shop's import template or a sample export of a few of your products, so the columns match. The fields you need, such as name, code, price, description, specs, category, photos. One or two supplier pages saved from your browser (File > Save page as). How to name photo files. And your confirmation that the supplier lets you use its photos and texts.
We will ask you:
- Which supplier site and pages?
- Your shop and its import file
- How many products roughly?
- Photos
Compare packages
| Packages | BasicProduct pages to a table$22 | StandardA whole catalogue section$43 | PremiumSeveral suppliers or sections$76 |
|---|---|---|---|
| Deadline | 1 day | 2 days | 3 days |
| Revisions | 1 | 2 | 3 |
| Sites | 1 | 1 | up to 3 |
| Kinds of page | 1 | 2 (category and product) | up to 3 |
| Fields | up to 10 | up to 25 | up to 25 on each |
| Goes through the pages of a list | No | Yes | Yes |
| Results file | CSV | Excel or CSV | Excel, CSV or JSON |
| Duplicates removed, resumes where it stopped | No | No | Yes |
| Photos | links in a column, files to a folder | links in a column, files to a folder | links in a column, files to a folder |
| Order Basic | Order Standard | Order 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.
Questions and answers
Will the file import into my shop straight away?
The columns follow the template you send, so in most cases yes. We check the file against your template, not inside your shop, so try a small import of the first rows before loading everything.
May I use the supplier's photos and descriptions?
Only if the supplier allows it: they belong to their owner, and getting the permission is up to you. The parser saves only pictures you may use.
Can it read dealer prices behind the supplier's login?
No. It never logs in, so dealer or wholesale prices behind an account stay out of reach. Ask the supplier for a price file; the parser still collects the rest of the open catalogue.
Can it copy a catalogue from Amazon, Google or a social network shop?
No. Their terms forbid it; the same goes for LinkedIn and other social networks. Use the official export of the service or ask the seller for a file.
What if the supplier changes its site?
The parser follows the pages as they are now. A later change of layout needs an update, which is a new order.
Did not find your answer?


