Website uptime checkDevelopment & Customization

A Python script that checks that your site answers and emails you from your own mailbox when it goes down

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 script that checks that your site answers and emails you from your own mailbox when it goes down

Example result

Example for the Standard package

Merging the monthly sales files of 9 shops into one Excel report

How it is run

python merge_sales.py --month 2026-10
2026-11-02 09:14:03 INFO  Folder: sales/2026-10, 9 files found
2026-11-02 09:14:03 INFO  shop-01.csv: 1,284 rows
2026-11-02 09:14:04 INFO  shop-02.xlsx: 967 rows
2026-11-02 09:14:04 WARN  shop-07.csv: 3 rows without a price skipped (lines 88, 412, 913)
2026-11-02 09:14:05 INFO  Done: 10,412 rows -> report-2026-10.xlsx (sheets "Sales" and "Totals")

Settings, not code

The column names of each shop live in settings.ini, so a new shop or a renamed column is a line there:

[columns]
date = Date, Sale date, Day
product = Product, Item, Name
quantity = Qty, Quantity, Pcs
price = Price, Unit price

A part of the code

def read_shop_file(path: Path, columns: dict[str, list[str]]) -> pd.DataFrame:
    """Reads one shop's file and gives it the report's column names."""
    table = pd.read_excel(path) if path.suffix == ".xlsx" else pd.read_csv(path, encoding="utf-8-sig")
    renamed = {}
    for name, variants in columns.items():
        found = next((c for c in table.columns if c.strip() in variants), None)
        if found is None:
            raise ReportError(f"{path.name}: no column for '{name}' (looked for {', '.join(variants)})")
        renamed[found] = name
    table = table.rename(columns=renamed)[list(columns)]
    table["shop"] = path.stem
    return table

Files: a ZIP archive with merge_sales.py (310 lines), settings.ini, requirements.txt and a README with installing Python, running the script and what each message in the log means. The client runs it on their own computer.

Client: a small chain of 9 stationery shops; each shop sends its sales for the month as a CSV or Excel file, with slightly different column names. Task: one script that reads every file in a folder, brings the columns to one shape, and writes a single Excel report with all sales and a sheet of totals by shop.

The client and all details are made up.

About this service

If your shop or booking site goes down at night, you may only learn about it from a customer in the morning. This Python script opens the pages you list every few minutes and sends you an email when one stops answering, returns an error or, from Standard, loads without a word that must be there, such as your Add to cart button. It tries again before raising an alarm, so a single slow answer does not wake you, and writes again when the site is back. Emails go from your own mail account; you put its sending password into the settings yourself. Run it on a computer or server that stays on and is not the one your site lives on, or it falls silent with the site. It tells you about a problem; it does not fix it.

What is included

  • What you getA ZIP archive with the Python script, a README with step-by-step instructions and, from Standard, a settings file with addresses and mail settings; the code is also shown on the order page.
  • Down and back upOne email when it fails, one when it is back
  • No false alarmsRetries before writing to you
  • Page content checkFrom Standard, a word that must be on the page
  • From your mailboxYour own mail account, password kept out of the code
  • Readable codeWith comments, easy to add a page later

How it works

  1. 1
    TaskYou list the pages to watch and where alerts should go
  2. 2
    CodeWe write the script and the guide to running it
  3. 3
    Try itYou run it with a page that does not exist to see an alert arrive
  4. 4
    ChangesYou ask for changes within your package and send any error message

What we need from you

The addresses to watch (home page, cart, booking page), how often to check them and, from Standard, a word or phrase each page must show. Where alerts should go and which mail account sends them (your provider's name is enough for us to describe its sending settings; the password you enter yourself). Where the script will run: a computer that stays on, or a server, with its system (Windows, macOS or Linux).

We will ask you:

  • Which pages should it watch?
  • How often, and what counts as down?
  • Where should alerts go?
  • Where will it run?

Compare packages

PackagesBasicOne site, one alert$16StandardChecks with settings$33PremiumUptime tool$67
Deadline1 day2 days3 days
Revisions123
Codeup to 150 linesup to 400 linesup to 1,000 lines
Files of code1up to 3up to 8
Settings fileNoYesYes
Clear error messages and a logNoYesYes
Run options and a guide to running it on a scheduleNoNoYes
Guide to installing and running it (README)YesYesYes
LanguagePythonPythonPython
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

Where should I run it?

On a machine that is always on and separate from your site, such as an office computer, a home mini server or a small rented server. If it runs on the same server as the site, it goes down with it and cannot warn you.

Can it send a text message instead of an email?

This offer sends emails. Many phones can show an email as an alert; a message to a service with a public API can be added within your package, with your own key in the settings.

Will it check my site's speed or security?

It measures how long each page takes to answer and, in Premium, warns above your limit. It does not test security, look for viruses or log in to admin pages.

How many emails can it send?

It writes only when something changes: once when a page fails and once when it is back, so it stays well within the sending limits of your mail service.

Did not find your answer?

Packages