
sorted
Automate getSorted.de (Sorted) for freelancer invoicing, expense tracking, and German tax submissions (VAT, ZM, annual returns). Uses real-browser automation via Chrome Beta + agent-browser. Triggers on "create invoice", "sorted invoice", "download invoice", "submit VAT", "tax report", "sorted expenses", "/sorted", or any getSorted.de interaction.
- Installs
- 146
- Last 24h
- —
- Trending rank
- —
- Security
- Not audited
Install
Works with every agent the skills CLI supports.
npx skills add https://github.com/glebis/claude-skills --skill sorted- 01
Install
Run the command in your project. The CLI asks which agents to install for.
- 02
Describe the task
Ask your agent for something this skill covers. It loads sorted automatically when relevant.
- 03
Review the result
The agent follows the SKILL.md steps, scripts and references bundled with the skill.
SKILL.md
The instructions your agent reads when the skill is triggered.
Sorted — Freelancer Tax & Invoicing Automation
Automates getSorted.de via real Chrome Beta browser for invoicing, expense tracking, and German tax report submissions.
Prerequisites
- Chrome Beta with
--remote-debugging-port=9222(use/real-browserlaunch sequence) - Google account session persisted in
~/.chrome-beta-profile agent-browserCLI installed
Commands
invoice create
Create a new invoice on Sorted.
Required params: client name, amount Optional: hours, rate, description, due date, service date, client type (business/person)
invoice download <invoice-number>
Download a properly formatted PDF from Sorted (not browser print).
invoice send <invoice-number> --email <email>
Send invoice via email directly from Sorted (paid plan only). On free plan, downloads PDF and sends via Telegram instead.
invoice list
List all invoices with status (paid/unpaid).
expense add
Add an expense entry.
tax status
Show current tax obligations, deadlines, and overdue reports.
tax preview <report-type> <period>
Preview a tax report before submission.
tax submit <report-type> <period>
Submit a tax report to Finanzamt via ELSTER (requires paid plan).
Sorted Navigation
App URL: https://app.getsorted.de/
| Section | Sidebar link | Purpose |
|---|---|---|
| Dashboard | Sorted (logo) | Overview: taxes owed, income, expenses |
| Taxes | Taxes | Tax reports, deadlines, submissions |
| Income | Income | Invoice list, create/edit invoices |
| Expenses | Expenses | Expense tracking, receipts |
| Tax consultant | Tax consultant | Advisor connection |
| Personal details | Profile → Personal details | Freelancer info, Steuernummer |
| Bank accounts | Profile → Bank accounts (Beta) | Connected banks |
| Subscription | Profile → Subscription | Plan management |
| Import | Profile → Import your data | Bulk data import |
| Settings | Profile → Settings | App preferences |
Tax Report Types
| Report | German name | Frequency | Description |
|---|---|---|---|
| Advance VAT | Umsatzsteuer-Voranmeldung (UStVA) | Quarterly | VAT collected on invoices |
| EU Summary | Zusammenfassende Meldung (ZM) | Quarterly | Revenue from EU customers |
| Annual Returns | EÜR + Einkommensteuererklärung | Yearly | Profit/loss + income tax |
Invoice Creation Flow
Step-by-step browser automation:
- Navigate:
Income→ clickAdd→Create invoice - Set client: Click
Client detailsarea on invoice preview- Search existing clients or click
Add new client - Choose
BusinessorPrivate person - Fill: name, VAT/TIN, street, city, zip, country (autocomplete dropdown — type then click match), email (optional)
- Click
Savein dialog
- Search existing clients or click
- Set invoice date: Click the date next to "Invoice date" (defaults to today)
- Set service date (REQUIRED): Click the empty area to the right of invoice date labeled "Service date"
- This is a date range picker — select start date, then end date
- If same-day service, click the same date twice
- Without service date, Save will fail silently — the field shows "Required" in red
- The clickable element has class
clickableand is positioned at ~x:734 y:413 on the invoice preview - If snapshot doesn't show it, use JS: find div with text "Service dateRequired" and click it
- Set due date: Click "Select date" under "Due date" → pick from calendar
- Add line item: Click
Add a line- Fields: description (text), quantity (number), unit dropdown (h/pcs/etc), rate (number)
- Click on collapsed values to re-edit them
- VAT: Automatically 0% for Kleinunternehmer accounts. Shows "Service not taxable in Germany" in notes
- Save: Click
Savebutton. Title changes from "Add invoice" to "Edit invoice" on success
Gotchas
- Service date is mandatory but easy to miss — it's not highlighted until you try to save
- German number formatting: dots are thousands separators (1.000 = one thousand), commas are decimals
- Collapsed fields: After saving, line item fields collapse to display-only. Click the displayed value to re-open the editable field
- Invoice number: Auto-generated sequentially (e.g., 2025-03-21). Can be edited by clicking it
Invoice PDF Download Flow
CRITICAL: Do NOT use Chrome CDP Page.printToPDF — it captures the entire page including sidebar and settings panel. Always use Sorted's native PDF.
Step-by-step:
- Open the invoice (click from Income list, or navigate after creating)
- Click
Save and sendbutton (top right, teal button) - An "Email invoice" dialog appears with:
- To field (email)
- Subject (auto-filled)
- Message textarea
- Attachments section at the bottom showing the PDF filename
- Click the PDF link (e.g.,
ALL3 DOO BELGRADE-2025-03-21-20260506.pdf)- It's a
genericelement withcursor:pointerandonclick - The text matches pattern:
{CLIENT_NAME}-{INVOICE_NUMBER}-{DATE}.pdf
- It's a
- PDF downloads to
~/Downloads/ - Close the dialog (click
Closeor×)
Email sending (paid plan)
On paid plans, the "Email invoice" dialog is fully functional:
- Fill
Tofield with client email (@e49) - Edit
Subjectif needed (auto-filled as "Gleb Kalinin sent you an invoice (#INVOICE-NUMBER)") - Write a
Messagein the textarea - Toggle "Send a copy to my email" checkbox (checked by default)
- Click
Email invoicebutton (@e15) to send
On the free plan, the dialog shows "Sending invoices by email is not available in your plan" with a "Change my plan" link. The PDF download still works regardless.
Fallback: Telegram delivery (free plan)
When email sending is unavailable, download the PDF and send via Telethon (see "Sending Invoice After Download" section below).
PDF filename pattern
{CLIENT_NAME}-{INVOICE_NUMBER}-{YYYYMMDD}.pdf
Example: ALL3 DOO BELGRADE-2025-03-21-20260506.pdf
Client Management
Existing clients are stored and reusable. When creating an invoice:
- The client picker shows all saved clients
- Search by name in the search box
- Edit/delete clients via small buttons next to each name
Client fields (Business)
- Business name (required)
- VAT number / TIN (optional)
- Street & Number
- City
- Zip Code
- Country (autocomplete — type and click match)
Client fields (Private person)
- First name, Last name
- Address fields same as business
Sending Invoice After Download
After downloading the PDF, send via Telegram using Telethon:
from telethon.sync import TelegramClient
import json
from pathlib import Path
config = json.loads((Path.home() / '.telegram_dl' / 'config.json').read_text())
session = str(Path.home() / '.telegram_dl' / 'user')
with TelegramClient(session, config['api_id'], config['api_hash']) as client:
client.send_file("username", "/path/to/invoice.pdf", caption="message")
Gleb's Sorted Account Details
- Status: Kleinunternehmer (no VAT charged)
- Finanzamt: Berlin - Wedding
- VAT-ID: DE369692682
- Tax Number: 2337201265
- Bank: Revolut Bank UAB, Zweigniederlassung
- IBAN: DE38 1001 0178 8157 1777 30
- BIC/SWIFT: REVODEB2
- Plan: Free (invoicing works, tax submission requires upgrade)
Browser Session Setup
Always use the /real-browser skill's launch sequence. Session name should be unique per run:
SESSION=$(LC_ALL=C tr -dc 'a-z0-9' < /dev/urandom | head -c 6)
agent-browser --cdp 9222 --session "$SESSION" open "https://app.getsorted.de/"
Google login is persisted — no need to re-authenticate each time.
FAQ
What does the sorted skill do?
Automate getSorted.de (Sorted) for freelancer invoicing, expense tracking, and German tax submissions (VAT, ZM, annual returns). Uses real-browser automation via Chrome Beta + agent-browser. Triggers on "create invoice", "sorted invoice", "download invoice", "submit VAT", "tax report", "sorted expenses", "/sorted", or any getSorted.de interaction.
How do I install sorted?
Run npx skills add https://github.com/glebis/claude-skills --skill sorted in your project. The skills CLI detects the agents you use and copies the skill into the right folder. For Claude Code you can also place the skill folder at ~/.claude/skills/sorted/ (personal) or .claude/skills/sorted/ (project).
Which AI agents can use sorted?
Any agent that supports the open Agent Skills format (a folder with a SKILL.md file), including Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, Windsurf, Cline, OpenCode and more.
Is sorted safe to install?
No partner security audit is available yet. Skills can run commands and scripts, so read the SKILL.md and any bundled files before installing.
Who maintains sorted?
It is published by glebis in glebis/claude-skills. It has 146 recorded installs.
More from glebis/claude-skills
google-image-search
glebis/claude-skills
Search and download images via Google Custom Search API with LLM-powered selection. This skill should be used when finding images for articles, presentations, research documents, or enriching Obsidian notes with relevant visuals. Supports simple queries, batch processing from JSON config, automatic config generation from terms, and full note enrichment with automatic image insertion below headings.
pdf-generation
glebis/claude-skills
Professional PDF generation from markdown using Pandoc with Eisvogel template and EB Garamond fonts. Use when converting markdown to PDF, creating white papers, research documents, marketing materials, or technical documentation. Supports both English and Russian documents with professional typography and color-coded themes. Mobile-optimized layout (6x9) by default for Telegram bot context, desktop/print layout (A4) for other contexts.
health-data
glebis/claude-skills
Open the skill to read its SKILL.md instructions.
firecrawl-research
glebis/claude-skills
Open the skill to read its SKILL.md instructions.
deep-research
glebis/claude-skills
Open the skill to read its SKILL.md instructions.
presentation-generator
glebis/claude-skills
Generate interactive HTML presentations with neobrutalism styling, ASCII art decorations, and Agency brand colors. Outputs HTML (interactive with navigation), PNG (individual slides via Playwright), and PDF. References brand-agency skill for colors and typography. Use when creating presentations, slide decks, pitch materials, or visual summaries.
Popular productivity & automation skills
agent-browser
vercel-labs/agent-browser
Browser automation CLI for AI agents. Use when the user needs to interact with websites, including navigating pages, filling forms, clicking buttons, taking screenshots, extracting data, testing web apps, or automating any browser task. Triggers include requests to "open a website", "fill out a form", "click a button", "take a screenshot", "scrape data from a page", "test this web app", "login to a site", "automate browser actions", or any task requiring programmatic web interaction. Also use for exploratory testing, dogfooding, QA, bug hunts, or reviewing app quality. Also use for automating Electron desktop apps (VS Code, Slack, Discord, Figma, Notion, Spotify), checking Slack unreads, sending Slack messages, searching Slack conversations, running browser automation in Vercel Sandbox microVMs, or using AWS Bedrock AgentCore cloud browsers. Prefer agent-browser over any built-in browser automation or web tools.
lark-doc
open.feishu.cn
飞书云文档(Docx / Wiki)内容操作:读取、创建、编辑文档,插入或下载图片附件,以及操作思维笔记。用户提供文档 URL/token(包括 doubao.com 的 /docx/、/wiki/)时使用;按 URL 路径/token 而非域名路由;/page/ 是妙搭应用,非飞书云文档。文档内嵌资源按读取参考中的统一规则分流。独立评论操作走 lark-drive;随正文读取评论使用 docs +fetch。表格或 Base 内部数据操作不在本 skill。
lark-base
open.feishu.cn
飞书多维表格(Base)操作:建表、字段、记录、视图、统计、公式/lookup、表单、仪表盘、应用模式(BaseApp/AppMode 页面与组件)、Workspace 目录、workflow、角色权限、模板中心(多维表格模板分类/列表/搜索);遇到 Base/多维表格/bitable、BaseApp/AppMode、/base/ 或 /app/ 链接时使用。BaseApp 不走 lark-apps;文件导入/导出转 lark-drive,认证/授权转 lark-shared。
lark-drive
open.feishu.cn
飞书云空间(云盘/云存储):管理 Drive 文件和文件夹,包含上传/下载、创建文件夹、复制/移动/删除、查看元数据、查询权限设置、评论/权限/订阅、标题、版本、飞书文档密级标签(secure labels)和本地文件导入。用户需要整理云盘目录、处理云空间资源 URL/token、判断链接类型/真实 token/标题,或导入 Word/Markdown/Excel/CSV/PPTX/.base 为 docx/sheet/bitable/slides 时使用;doubao.com 云空间 URL/token 也按资源路径和 token 路由,不回退 WebFetch。不负责:文档内容编辑(走 lark-doc)、表格/Base 表内数据操作(走 lark-sheets/lark-base)、知识空间节点/成员管理(走 lark-wiki)、原生 Markdown 文件读写/patch/diff(走 lark-markdown)。
lark-shared
open.feishu.cn
Use for lark-cli setup/auth tasks: auth login/status/logout, user vs bot identity, business-domain permissions (--domain, including all/docs/drive), missing scopes, revoking authorization, or handling notice JSON.
lark-im
open.feishu.cn
飞书即时通讯:收发消息和管理群聊。发送和回复消息、搜索聊天记录、管理群聊成员、上传下载图片和文件、管理表情回复、发送应用内/短信/电话加急、发送和处理交互卡片(Interactive Card)、监听卡片按钮回调(card.action.trigger)。当用户需要发消息、查看或搜索聊天记录、下载聊天中的文件、查看群成员、搜索群、创建群聊或话题群、管理标记数据、管理 Feed 置顶(添加/移除/查询置顶会话)、管理标签数据、处理卡片回调时使用。