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
Exchange offices, shops that price in several currencies and bookkeepers use this parser to save rates from open pages into a table: currency or coin, buy and sell rate, official rate, change for the day when shown, the source and the time of the reading. Send the pages you take rates from, such as a bank's public rates table, and one or two of them saved from your browser. You get Python code, a settings file and a README and run it on your computer when you need a reading. Rates are copied as the page shows them at that moment: it is not a live feed and gives no financial advice or forecasts. Where a source has an official open data feed, we say so. It reads open pages at a polite pace and never logs in or gets around captchas or protection. You decide whether the site's 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.
- Buy and sell apartSeparate columns, as numbers
- Time of each readingDate and time in every row
- Source in a columnSo rates from different pages stay apart
- Polite paceNot every second: a pause you set
- Runs on your computerWindows, macOS or Linux, with Python
How it works
- 1SourcesYou give the rate pages and the currencies or coins
- 2ParserWe write the code and the guide to running it
- 3RunYou run it and compare the first reading with the site
- 4ChangesYou ask for changes within your package and send any error message
What we need from you
The pages you take rates from, with links, and the currencies or coins you need. The fields in the order of your table, e.g. currency, buy, sell, official rate, change, source, time. One or two of those pages saved from your browser (File > Save page as) or screenshots. How often you need a reading, the number format (dot or comma), and CSV or Excel.
We will ask you:
- Which pages?
- Currencies or coins
- The fields you need
- How often will you run it?
Compare packages
| Packages | BasicRates from one page$22 | StandardList and currency pages$43 | PremiumUp to 3 sources$76 |
|---|---|---|---|
| Deadline | 1 day | 2 days | 3 days |
| Revisions | 1 | 2 | 3 |
| Sites | 1 | 1 | up to 3 |
| Kinds of page | 1 | 2 (list and currency page) | 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 |
| Time of reading in each row | Yes | Yes | Yes |
| 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
Can it update rates every second for trading?
No. It reads pages at a polite pace when you run it, so it suits a reading every hour or every day, not trading. For live prices, use the official API of an exchange; keys for it never go into our code.
Can I use these rates for my prices or bookkeeping?
Which source counts as official for you is your decision, and your accountant's. The parser copies rates as the page shows them; we give no financial advice.
Can it read my balance or rates inside an exchange account?
No. It never logs in, and passwords, tokens and keys never go into the code or to us.
Which sites are out?
Google, Amazon, LinkedIn and social networks, pages behind a captcha or a sign-in, and rates drawn as pictures. For other sites, you decide whether their terms allow it. After a layout change the parser needs an update.
Did not find your answer?


