Process invoice emails: download PDF attachments, extract vendor + date, generate normalized filename, and send to Holded inbox via n8n webhook.
Scanned 5/31/2026
Install via CLI
openskills install tools-only/X-Skills---
name: holded-invoices
description: "Process invoice emails: download PDF attachments, extract vendor + date, generate normalized filename, and send to Holded inbox via n8n webhook."
---
# Holded invoices (Gmail → PDF → n8n webhook → Holded inbox)
Goal: when an email contains an invoice PDF, upload it to Holded via an n8n webhook.
## Destinations
Configure defaults in `~/.config/skills/config.json` under `holded_invoices`:
- `company_email`
- `freelancer_email`
- `webhook`
Example:
```json
{
"holded_invoices": {
"company_email": "empresa@holdedbox.com",
"freelancer_email": "autonomo@holdedbox.com",
"webhook": "https://n8n.example.com/webhook/..."
}
}
```
Webhook fields:
- `email` (Holded inbox) (HTTP header)
- `nombre` (base filename, without extension) (HTTP header)
- Body: raw PDF (`Content-Type: application/pdf`)
Filename convention:
- `<company>-<YYYY>-<MM>.pdf`
- Vendor slug: lowercased, spaces → dashes, simplified (e.g. "Google INC" → `google`).
## Scripts
### 1) Extract vendor + date from a PDF
- `scripts/invoice-extract.js --pdf /path/to/invoice.pdf`
- Outputs JSON: `{ vendor, vendorSlug, year, month }`
### 2) Upload a PDF to Holded via n8n
- `scripts/holded-upload.sh --pdf /path/to/invoice.pdf --email <holdedbox> --nombre google-2026-01.pdf`
- If not configured, pass `--webhook` explicitly.
### 3) End-to-end: from a Gmail message ID
Downloads the first PDF attachment, suggests a filename, and (optionally) uploads.
- `scripts/holded-from-gmail.sh --account <gmail-account> --message-id <id> --type empresa|autonomo`
- If not configured, pass `--email-empresa`, `--email-autonomo`, and/or `--webhook`.
Flags:
- `--yes` skip confirmation and upload
## Agent workflow
When reviewing an email thread with a PDF invoice:
1) Ask: is it `empresa` or `autonomo`.
2) Download the PDF attachment.
3) Run `invoice-extract.js` to infer vendor + year/month.
4) Propose filename and ask for confirmation.
5) Call webhook via `holded-upload.sh`.
If extraction fails, ask for vendor + date and continue.
No comments yet. Be the first to comment!
Postiz is a tool to schedule social media and chat posts to 28+ channels X, LinkedIn, LinkedIn Page, Reddit, Instagram, Facebook Page, Threads, YouTube, Google My Business, TikTok, Pinterest, Dribbble, Discord, Slack, Kick, Twitch, Mastodon, Bluesky, Lemmy, Farcaster, Telegram, Nostr, VK, Medium, Dev.to, Hashnode, WordPress, ListMonk
This skill performs detailed on-page SEO audits to identify issues and optimization opportunities. It analyzes all on-page elements that affect search rankings and provides actionable recommendations.
Brand voice, visual identity, messaging frameworks, asset management, brand consistency. Activate for branded content, tone of voice, marketing assets, brand compliance, style guides.
When the user wants to optimize, improve, or increase conversions on any marketing page — including homepage, landing pages, pricing pages, feature pages, or blog posts. Also use when the user says "CRO," "conversion rate optimization," "this page isn't converting," "improve conversions," or "why isn't this page working." For signup/registration flows, see signup-flow-cro. For post-signup activation, see onboarding-cro. For forms outside of signup, see form-cro. For popups/modals, see popup-cro.
When the user wants help creating, scheduling, or optimizing social media content for LinkedIn, Twitter/X, Instagram, TikTok, Facebook, or other platforms. Also use when the user mentions 'LinkedIn post,' 'Twitter thread,' 'social media,' 'content calendar,' 'social scheduling,' 'engagement,' or 'viral content.' This skill covers content creation, repurposing, and platform-specific strategies.