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
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
Gmail filters act only on new mail and only by simple conditions. This Google Apps Script tidies the mail already in your inbox too, by rules such as: label everything from your suppliers' domains, archive newsletters older than 14 days, mark receipts as read and put them under Accounts, or star unanswered messages from clients after three days. It works by Gmail search, the same words you type in the search box, so a rule is easy to read and change. From Standard the rules sit on a Google Sheet tab you edit, and a log shows what it did. It does not delete mail: it labels, archives and marks; moving to Trash is added only if you give that rule. You install and run it in your own Google account.
What is included
- What you getA ZIP archive with the Apps Script code and a README that shows how to add it to your account, allow access and run it; the code is also shown on the order page.
- Old mail tooWorks on what is already in your inbox
- Gmail search rulesfrom:, subject:, older_than: and the rest
- Labels, archive, read, starThe actions you choose for each rule
- No deleting by defaultTrash only if you give that rule
- Readable codeWith comments, easy to add a rule later
How it works
- 1RulesYou list the rules in plain words
- 2CodeWe write the script and the guide to installing it
- 3Try itYou run it on one rule first and check the labels
- 4ChangesYou ask for changes within your package and send any error message
What we need from you
Your rules in plain words: which mail (sender or domain, words in the subject, age, has an attachment), what to do with it (label, archive, mark as read, star) and the label names you use. Roughly how much mail is in the box and how often new mail should be sorted. Whether you use a free Gmail or Google Workspace. No passwords and no screenshots of private mail: example senders like shop.example are enough.
We will ask you:
- What should be sorted?
- What should happen to each kind?
- Old mail as well, or only new?
- Anything it must never do
Compare packages
| Packages | BasicOne set of rules$16 | StandardRules in a sheet$33 | PremiumMail tidying tool$67 |
|---|---|---|---|
| Deadline | 1 day | 2 days | 3 days |
| Revisions | 1 | 2 | 3 |
| Code | up to 150 lines | up to 400 lines | up to 1,000 lines |
| Files of code | 1 | up to 3 | up to 8 |
| Settings file | No | Yes | Yes |
| Clear error messages and a log | No | Yes | Yes |
| Run options and a guide to running it on a schedule | No | No | Yes |
| Guide to installing and running it (README) | Yes | Yes | Yes |
| Language | Google Apps Script | Google Apps Script | Google Apps Script |
| 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
Why not just use Gmail filters?
Filters work only when mail arrives and cannot wait a few days or check whether you replied. The script runs on all mail that matches, including old messages, and can use conditions like age.
Will it delete my emails?
No, not unless you give a rule that says to move certain mail to Trash, and even then Gmail keeps it in Trash for 30 days. By default it only labels, archives and marks.
Can it sort a mailbox with 100,000 emails?
Yes, in parts: a script run is limited to about six minutes, so it handles a batch each run and continues on the next one. The first clean-up may take several runs.
Do you get access to my mail?
No. You add the script in your own account and allow it access yourself. We never see your mail or log in to it.
Did not find your answer?


