How indecs works
indecs gives you a personal email address (username@indecs.app) that you can send documents to. We scan them for inappropriate content, generate a searchable summary using AI and forward everything - the original file plus the summary - to your chosen email address. The file is then deleted from our servers.
- Quickstart - scan a year of paperwork in an afternoon, from signup to a summarised, renamed file
- Billing - plans, pages, running out and auto top-up
- Notion and Dropbox - connect a folder or database as an input and output
- Troubleshooting - what every rejection code, status and silent failure means
Getting started
- Sign up with your email and password
- Confirm your email via the link we send you (valid for 24 hours)
- Pick a username - this becomes your indecs address (3-30 characters, letters, numbers, dots, underscores and hyphens)
- Set your forwarding address in the dashboard - this is where your documents will be sent
- Send a document to
username@indecs.appand it will arrive in your inbox with a summary
For the full walkthrough, including scanner setup and which settings to turn on first, see the quickstart guide.
Supported files
You can send PDF, JPG, PNG, WebP, GIF, HEIC, AVIF, BMP and ZIP files. Other file types are ignored. The total size of all attachments in a single email must be under 20 MB. HEIC, AVIF and BMP files are automatically converted to JPEG before processing. ZIP archives are extracted and each supported file inside is processed individually.
Uploading from the dashboard
You can also drag and drop files directly onto the dashboard page, or click to browse. This works the same as emailing them - files are scanned, summarized and forwarded. You can drop .eml email files too and we will extract the attachments from them.
How summaries work
Every document is checked for inappropriate content, then handed to a summary model to generate:
- A title - a searchable name like "Jon Doe's Optical Prescription - 4/1/2025"
- Dates - any creation, issuance or signature dates found in the document
- Issuer - the person, company or agency that produced the document
- Summary - a concise 2-4 sentence description of the key details
For images, the AI describes what the image shows instead of summarizing it as a document. Documents and images go through the same model-selection logic, described below - the only difference is which setting controls the choice.
The default model for everything is Gemma 4 26B, which is free. On the free plan, every document and image is processed on Gemma 4 26B and the model choice below has no effect. On a paid plan, your choice of summary model is honoured for documents, and your image quality setting picks the model for images.
If a document can't be read as a PDF, we retry once on Gemini 2.5 Flash before giving up.
When you send multiple documents in one email, we generate a collection title for the email subject (e.g. "Personal Tax Returns 2009-2013") using a fixed model - this one isn't user-selectable.
Summary model (documents)
On a paid plan, you can choose which AI model summarises your documents. Models come from three providers - Anthropic, OpenAI and Google - and Google offers two model families, Gemma and Gemini:
Claude (Anthropic)
- Haiku 4.5 (fast, cheap)
- Sonnet 4.6 (balanced)
- Opus 4.6 (most capable)
OpenAI
- GPT-4o mini (fast, cheap)
- GPT-4o (balanced)
- o4-mini (reasoning)
- Gemma 4 26B (free, experimental) (default) - free
- 2.5 Flash (fast, cheap)
- 2.5 Pro (balanced)
On the free plan, this setting is visible but does not take effect - every document is processed on Gemma 4 26B regardless of what's selected, to keep the free plan's cost at $0. Upgrading to a paid plan makes your choice take effect immediately.
Not sure which to pick? We publish measured accuracy and cost per model against a corpus of deliberately difficult documents - poor scans, handwriting, multi-column layouts - so you can see what the cheaper models actually give up. See the model benchmarks.
Image quality
Images use a separate setting, "Image quality", instead of the document model picker:
- Standard - Gemma 4 26B, free
- High - Claude Opus 4.6, the highest-quality option, at roughly $0.03 per image
"High" is a Plus-plan feature - the free plan cannot select it, in the settings form or via the API.
Content moderation always runs on a fixed model regardless of your provider or plan choice, so a user cannot weaken or inflate the cost of their own content check.
Forwarded email format
The forwarded email includes:
- A metadata section with extracted dates and issuer (when found)
- The AI-generated summary
- The original file(s) as attachments
- A footer with a job ID and unsubscribe link
The email subject is set to the document title (e.g. "Invoice #4821 from Acme Corp - March 2025 [indecs]"). Reply-to is set to your indecs address.
Settings
Free plan restrictions
The free plan gives you 100 pages a month, PDF only. It does not support:
- Images or other non-PDF files - a free-plan send of a JPG, PNG or similar is forwarded as-is with an upgrade prompt and no summary.
- Rename attachments, date in filename and inline images - these are Plus-only and are switched off automatically on the free plan, regardless of what's saved in your settings.
- Splitting multiple attachments into separate emails - the "max attachments per email" setting has no effect on free.
- High image quality - see "Image quality" above.
None of this applies once you're on a paid plan. See the billing guide for plans and pricing.
Forwarding options
- Show original sender name - when on, the "from" name on forwarded emails shows who sent the original email. When off, it shows your indecs address.
- Rename attachments - when on, files are renamed to the AI-generated title (e.g.
Jon Doe's Prescription.pdf). Multiple files are numbered. - Date in filename - appends the document's creation date to the filename in your chosen format:
20250401or01-Apr-25. Only applies when rename is on. - Inline images - when on, image attachments are displayed in the email body below their summary. PDFs are always attached as files.
- Max attachments per email - if an email has more attachments than this limit, the forwarded email is split into multiple messages. Set to "1 (one email per document)" to always get separate emails. "Don't separate" keeps everything together.
Content moderation
Every document is checked for inappropriate content before summarisation. You can choose how strict this check is:
- Strict (default) - rejects anything inappropriate in a professional context, including nudity, suggestive content, violence and explicit language
- Standard - rejects clearly harmful content like pornography, extreme violence, hate speech and illegal material
- Permissive - only rejects illegal content (CSAM), explicit pornography and extreme gore. Swimwear, artistic nudity and similar content is allowed
All levels always reject illegal content. Content moderation cannot be fully disabled.
Sender rules
You can control who can send documents to your indecs address:
- Allow/block rules - block specific senders or allow them. Use
*@domain.comto match an entire domain. Allow rules override blocks. - Allowlist-only mode - when on, only senders with an explicit "allow" rule can send you documents. Everyone else is rejected.
- Your own email address is always allowed regardless of rules.
Auto-clear
Controls how long job records are kept in your dashboard:
- Never (default) - keep all records
- When done - clear immediately after successful processing. Failed jobs are kept for 1 hour.
- 1 day / 7 days / 30 days / 1 year - clear after the specified period
Cleared records have personal information removed but we retain anonymized commercial data (token usage, model, timestamps) for billing purposes.
Jobs table
The "Recent jobs" table shows your last 10 processed documents with:
- Job - a short identifier for the job
- Via - whether the document arrived by email or was dropped on the page
- Status - received, processing, forwarded, rejected, failed, backlogged, spam or blocked. See the status glossary for what each one means.
- Model - which AI model was used, shown as a short code (H4.5, S4.6, O4.6, 4om, 4o, o4m, G4, GF, GP)
- Tokens - how many AI tokens were used
- Cost - estimated cost for that job
Failed jobs have a retry button. All jobs can be deleted individually with the × button.
Estimated costs
The dashboard shows estimated AI costs based on token usage. Approximate pricing per million tokens:
| Model | Input | Output |
|---|---|---|
| Claude | ||
| Haiku 4.5 | $0.80 | $4.00 |
| Sonnet 4.6 | $3.00 | $15.00 |
| Opus 4.6 | $15.00 | $75.00 |
| OpenAI | ||
| GPT-4o mini | $0.15 | $0.60 |
| GPT-4o | $2.50 | $10.00 |
| o4-mini | $1.10 | $4.40 |
| Gemma | ||
| Gemma 4 26B (default) | $0.00 | $0.00 |
| Gemini | ||
| 2.5 Flash | $0.15 | $0.60 |
| 2.5 Pro | $1.25 | $10.00 |
This table is generated from the same model registry the app uses to route jobs, so a new model shows up here automatically.
Each document typically uses a few thousand tokens for moderation (always Gemma 4 26B, free, regardless of your chosen provider) plus a few thousand for summarisation (your chosen model, or Gemma 4 26B on the free plan).
Limits
- Maximum attachment size per email: 20 MB
- Supported file types: PDF, JPG, PNG, WebP, GIF, HEIC, AVIF, BMP, ZIP
- Username: 3-30 characters
- Password: 8+ characters
- Login attempts: 10 per hour
- Signup attempts: 5 per hour
Security and privacy
- Documents are deleted from our servers after forwarding
- We do not store the contents of your documents long-term
- Sender cooldowns automatically rate-limit abusive senders (by email and IP address)
- Passwords are hashed with PBKDF2 (100,000 iterations) and a server-side pepper; each hash stores its own iteration count, so the work factor can rise without invalidating old passwords
- Sessions expire after 7 days
Unsubscribing
Every forwarded email includes an unsubscribe link. If you unsubscribe:
- We stop forwarding to your email immediately
- Incoming documents are still received, scanned and held for you
- You can log in and re-enable forwarding at any time to receive waiting documents
- If you don't re-enable, we send a reminder after your grace period (default 14 days), a final warning 7 days later and suspend service 7 days after that
Vouchers and promotional codes
If you have a voucher or promotional code, enter it in the "Promotional code, coupons, etc." field on your dashboard. VIP credit codes add reserve pages to your account. Plan vouchers give you free access to a Plus plan for a set period.
If you're on a voucher and want to change your plan, you'll need to remove the voucher first. This downgrades you to the Free plan immediately, and you can then subscribe to whichever plan you'd like. Removing a voucher cannot be undone - if you remove it by accident, please contact hello@indecs.app and we'll sort it out.
For plans, page allowances and how auto top-up works, see the billing guide.
API
You can upload files and retrieve results programmatically using the API. Create an API key from the dashboard under "API keys" - each key is shown once on creation and cannot be retrieved later.
Authentication
All API requests require a Bearer token in the Authorization header:
Authorization: Bearer idk_your-key-here
Endpoints
POST /api/upload - upload one or more files for processing. Returns job IDs for polling.
curl -X POST https://indecs.app/api/upload \ -H "Authorization: Bearer idk_..." \ -F "files=@invoice.pdf"
Response:
{ "ok": true, "count": 1, "job_ids": ["abc-123-..."] }Upload modes - control where results are sent using the mode query parameter:
| Parameter | Notion/Dropbox | Use case | |
|---|---|---|---|
| (none) | Yes | Yes | Full processing |
?mode=no_email | No | Yes | Sync to services, skip email |
?mode=metadata | No | No | Just get the data back |
GET /api/jobs/:id - poll for job status and results. The done field is true when processing is complete.
curl https://indecs.app/api/jobs/abc-123-... \ -H "Authorization: Bearer idk_..."
Response (when done):
{
"ok": true,
"id": "abc-123-...",
"status": "forwarded",
"done": true,
"title": "Invoice #4821 from Acme Corp - March 2025",
"summary": "Monthly invoice for consulting services...",
"tags": ["invoice", "consulting"],
"doc_type": "invoice",
"dates": "March 2025",
"issuer": "Acme Corp",
"model_used": "claude-sonnet-4-6",
"page_count": 2,
"file_size": 184320
}GET /api/credits - check your remaining page balance before uploading.
{ "ok": true, "plan": "free", "total": 87 }If you upload with no credits remaining, the API returns 402 with "error": "no_credits".
Shell scripts (macOS)
We provide two shell scripts for processing files locally. Both write the AI summary into the file's Finder comment (visible in Get Info), add Finder tags and stamp a com.indecs.processed extended attribute with a timestamp so files aren't processed twice.
scan.sh- process a single filebatch-scan.sh- process an entire folder
Both require jq (brew install jq) and optionally tag (brew install tag) for Finder tags.
Single file (scan.sh)
Upload one file, poll for results, write metadata. Piped straight from curl:
INDECS_API_KEY="idk_your-key-here" bash <(curl -sfL --connect-timeout 5 https://indecs.app/scan.sh) /path/to/file.pdf
Or download it first and read it before running - a reasonable thing to do before piping any remote script into bash:
curl -sfL https://indecs.app/scan.sh -o scan.sh && chmod +x scan.sh INDECS_API_KEY="idk_your-key-here" ./scan.sh /path/to/file.pdf
INDECS_API_KEY on the command line lands in your shell history and, if used inline in a Hazel rule, in Hazel's own plain-text config. If that's a problem for your setup, keep the key in a ~/.indecs file and source it from a small wrapper script instead.
Hazel integration
To automatically process files dropped into a folder, create a Hazel rule with action "Run shell script" and paste:
INDECS_API_KEY="idk_your-key-here" bash <(curl -sfL --connect-timeout 5 https://indecs.app/scan.sh) "$1"
Batch processing (batch-scan.sh)
Process every supported file in a folder. Skips files that already have Indecs metadata, shows a progress bar with ETA and resumes where it left off if interrupted:
# Download both scripts curl -sfL https://indecs.app/scan.sh -o scan.sh && chmod +x scan.sh curl -sfL https://indecs.app/batch-scan.sh -o batch-scan.sh && chmod +x batch-scan.sh # Process a folder INDECS_API_KEY="idk_your-key-here" ./batch-scan.sh ~/Documents/scans # Re-process everything (including already-tagged files) INDECS_API_KEY="idk_your-key-here" ./batch-scan.sh --force ~/Documents/scans
Errors are logged to batch-scan-errors.log in the target folder. A .batch-scan-state file tracks progress so you can Ctrl-C and resume later.
Configuration
Both scripts accept these environment variables:
| Variable | Default | Description |
|---|---|---|
INDECS_API_KEY | (required) | Your API key |
INDECS_RENAME | false | Rename file to AI-generated title |
INDECS_TAGS | true | Add Finder tags |
INDECS_NOTIFY | false | Show macOS notifications |
INDECS_POLL_INTERVAL | 3 | Seconds between status checks |
INDECS_MAX_POLLS | 60 | Max poll attempts before giving up |
batch-scan.sh also accepts SCAN_SH to point to a custom location for scan.sh.
Diagnostics
Force-reject mode is a testing feature that rejects all incoming documents with code R0. This triggers the sender cooldown system so you can test how blocking and escalation work without sending inappropriate content.
Closing your account
You can permanently delete your account from the bottom of the dashboard. This removes all your data and cannot be undone.