Israeli dev teams and businesses using n8n struggle to connect Israeli APIs (Green Invoice, banks, payment gateways), handle Hebrew text in processing nodes, and schedule workflows that respect Shabbat and holidays. Without dedicated guidance, AI agents build workflows that run on Shabbat, send SMS in wrong formats, and ignore VAT considerations.
Author: @skills-il
Build and optimize n8n automation workflows with Israeli API integrations including Green Invoice, israeli-bank-scrapers, data.gov.il, and Israeli SMS gateways. Covers Hebrew data handling, Shabbat-aware scheduling, Israeli payment gateway webhooks, and self-hosting on Israeli cloud infrastructure.
npx skills-il add skills-il/developer-tools --skill n8n-hebrew-workflowsMap the user's Israeli business need to an n8n workflow pattern. Use this table to select the right architecture before building anything:
| Business Need | n8n Pattern | Key Nodes | Israeli API |
|---|---|---|---|
| Invoice reconciliation | Cron -> HTTP -> Compare -> Update | Cron, HTTP Request, IF, Function | Green Invoice API |
| Bank transaction categorization | Cron -> Code -> Spreadsheet | Cron, Execute Command, Google Sheets | israeli-bank-scrapers |
| Government data sync | Cron -> HTTP -> Transform -> DB | Cron, HTTP Request, Function, Postgres | data.gov.il CKAN API |
| SMS notifications | Trigger -> Function -> HTTP | Webhook, Function, HTTP Request | 019 SMS / Inforu API |
| Payment webhook handling | Webhook -> Validate -> Process | Webhook, IF, Function, HTTP Request | Cardcom / Tranzila / Grow |
| Holiday-aware scheduling | Cron -> HTTP -> IF -> Execute | Cron, HTTP Request, IF, Function | Hebcal API |
| Multi-step approval flow | Webhook -> Wait -> IF -> Notify | Webhook, Wait, IF, HTTP Request | Slack + SMS gateway |
Decision criteria for choosing between patterns:
Green Invoice (hashbonit yeruka) uses OAuth2 with API key + secret. Configure the HTTP Request node:
Method: POST
URL: https://api.greeninvoice.co.il/api/v1/account/token
Headers:
Content-Type: application/json
Body:
{
"id": "{{$env.GREEN_INVOICE_API_KEY}}",
"secret": "{{$env.GREEN_INVOICE_API_SECRET}}"
}Store the JWT token from the response and pass it to subsequent requests:
Authorization: Bearer {{$json.token}}Common Green Invoice endpoints for n8n workflows:
| Endpoint | Method | Use Case |
|---|---|---|
/api/v1/documents/search |
POST | Search invoices by date range, client, status |
/api/v1/documents |
POST | Create new invoice/receipt |
/api/v1/clients/search |
POST | Look up client by name or tax ID (osek number) |
/api/v1/payments |
GET | Fetch payment records for reconciliation |
/api/v1/businesses/me |
GET | Get current business info (company name, tax ID) |
Consult references/israeli-api-endpoints.md for full endpoint details, required fields, and response schemas.
n8n does not have a native Israeli bank node. Use the Execute Command node to run israeli-bank-scrapers:
npx israeli-bank-scrapers --company $BANK_NAME --id $USER_ID --password $PASSWORD --output jsonSupported banks: hapoalim, leumi, discount, mizrahi, otsarHahayal, beinleumi, massad, yahav, beyahadMishkantaot, oneZero, behatsdaa.
Security note: Store credentials in n8n's credential store, not in workflow JSON. Use environment variables for sensitive values. The --save-to-file option writes to the n8n container's filesystem, so mount a volume if persistence is needed.
Israeli government open data uses the CKAN API:
GET https://data.gov.il/api/3/action/datastore_search
Parameters:
resource_id: <resource-guid>
q: <search-term>
limit: 100
offset: 0Useful resource IDs for common workflows:
| Dataset | Resource ID | Content |
|---|---|---|
| Companies Registry | 8f714b7f-c35c-4b40-a0e0-55b6ac4ae2d2 | Registered Israeli companies |
| Non-Profit Registry | be5b7935-3922-45d4-9638-08871b17ec95 | Registered amutot (non-profits) |
| Import/Export Stats | Various | Trade statistics by HS code |
The API returns Hebrew field names. Use a Function node to normalize keys to English for downstream processing.
| Gateway | API Type | Auth | Best For |
|---|---|---|---|
| 019 SMS (InfruSMS) | REST | API key + secret | Bulk marketing, transactional |
| Inforu (SMSGlobal IL) | REST | Username + token | OTP, transactional, WhatsApp |
| Nexmo/Vonage IL | REST | API key + secret | International + local |
019 SMS example in an HTTP Request node:
Method: POST
URL: https://www.019sms.co.il/api
Headers:
Content-Type: application/json
Body:
{
"user": "{{$env.SMS_019_USER}}",
"password": "{{$env.SMS_019_PASS}}",
"from": "MyBusiness",
"to": "{{$json.phone}}",
"message": "{{$json.text}}"
}Israeli phone number formatting: Always send in international format 972XXXXXXXXX (drop the leading 0). A Function node before the SMS node should handle this:
const phone = $input.first().json.phone;
const formatted = phone.startsWith('0')
? '972' + phone.slice(1)
: phone.startsWith('+972')
? phone.slice(1)
: phone;
return [{ json: { ...items[0].json, phone: formatted } }];n8n Function nodes process strings as UTF-8, so Hebrew works natively. The problems arise at boundaries: API responses, CSV exports, email templates.
Common Hebrew data issues and fixes:
| Issue | Where It Happens | Fix |
|---|---|---|
| Reversed Hebrew in CSV | Spreadsheet File node export | Set encoding to UTF-8-BOM in output options |
| Broken nikud (vowels) | HTTP Request response parsing | Set response encoding to UTF-8 explicitly |
| Mixed RTL/LTR in emails | Send Email node | Wrap Hebrew text in <div dir="rtl"> |
| Hebrew JSON keys | data.gov.il API responses | Normalize keys in Function node before processing |
| Truncated Hebrew | String length checks | Use Array.from(str).length for character count, not .length |
Use this Function node snippet for proper Israeli Shekel formatting:
function formatNIS(amount) {
return new Intl.NumberFormat('he-IL', {
style: 'currency',
currency: 'ILS',
minimumFractionDigits: 2
}).format(amount);
}
// Input: 12345.60
// Output: 12,345.60 ₪For agorot (cents) precision in financial workflows, always work in agorot internally (integers) and convert to shekels only at display:
const amountInAgorot = Math.round(shekelAmount * 100);
// All calculations in agorot
const totalAgorot = amountInAgorot + taxAgorot;
// Convert back for display
const displayAmount = formatNIS(totalAgorot / 100);Israeli documents often use Hebrew dates or DD/MM/YYYY format. Parse with care:
// Parse Israeli date format DD/MM/YYYY
function parseIsraeliDate(dateStr) {
const [day, month, year] = dateStr.split('/').map(Number);
return new Date(year, month - 1, day);
}
// Parse Hebrew month names (common in government docs)
const hebrewMonths = {
'ינואר': 0, 'פברואר': 1, 'מרץ': 2, 'אפריל': 3,
'מאי': 4, 'יוני': 5, 'יולי': 6, 'אוגוסט': 7,
'ספטמבר': 8, 'אוקטובר': 9, 'נובמבר': 10, 'דצמבר': 11
};Business workflows in Israel must not run during Shabbat (Friday sundown to Saturday sundown) and Jewish holidays. n8n's built-in cron does not support this, so build a check node at the start of every scheduled workflow.
Architecture: Cron Trigger -> HTTP Request (Hebcal) -> IF (is Shabbat?) -> Continue or Stop
Hebcal API call in an HTTP Request node:
GET https://www.hebcal.com/shabbat?cfg=json&geonameid=293397&M=ongeonameid=293397 is Tel Aviv. Other common cities:
| City | Geoname ID |
|---|---|
| Jerusalem | 281184 |
| Tel Aviv | 293397 |
| Haifa | 294801 |
| Beer Sheva | 295530 |
The response includes candle lighting and havdalah times. Use a Function node to determine if the current time falls within Shabbat:
const now = new Date();
const shabbatData = $input.first().json;
const candleLighting = shabbatData.items.find(
item => item.category === 'candles'
);
const havdalah = shabbatData.items.find(
item => item.category === 'havdalah'
);
if (candleLighting && havdalah) {
const shabbatStart = new Date(candleLighting.date);
const shabbatEnd = new Date(havdalah.date);
if (now >= shabbatStart && now <= shabbatEnd) {
return []; // Empty output stops the workflow
}
}
return $input.all(); // Continue workflowFor Jewish holidays, query the Hebcal holidays API:
GET https://www.hebcal.com/hebcal?v=1&cfg=json&year=now&month=now&maj=on&mod=onFilter for yomtov: true items. These are days when work restrictions apply (similar to Shabbat).
Consult references/shabbat-cron-patterns.md for pre-built patterns covering weekly, monthly, and custom schedules with holiday awareness.
Israeli payment gateways send transaction results via webhooks (callback URLs). Configure n8n Webhook nodes to receive and process these.
Cardcom sends POST with form-encoded data to your callback URL:
n8n Webhook URL: https://your-n8n.example.com/webhook/cardcom-callback
Method: POST
Content-Type: application/x-www-form-urlencodedKey fields in the Cardcom callback:
| Field | Description | Values |
|---|---|---|
ReturnValue |
Transaction status | 0 = success, other = error code |
InternalDealNumber |
Cardcom transaction ID | Numeric string |
DealResponse |
Response description | Hebrew text |
CardOwnerID |
Customer Israeli ID (teudat zehut) | 9 digits |
NumOfPayments |
Installments (tashlumim) count | 1-36 |
Validation Function node after the Webhook:
const data = $input.first().json;
if (data.ReturnValue !== '0') {
// Transaction failed
return [{
json: {
success: false,
error: data.DealResponse,
cardcomId: data.InternalDealNumber
}
}];
}
return [{
json: {
success: true,
transactionId: data.InternalDealNumber,
amount: parseFloat(data.Sum),
installments: parseInt(data.NumOfPayments),
customerId: data.CardOwnerID
}
}];Tranzila uses a different callback pattern. The callback URL receives GET parameters:
https://your-n8n.example.com/webhook/tranzila-callback?Response=000&index=12345&sum=100.00¤cy=1| Field | Description | Values |
|---|---|---|
Response |
Status code | 000 = approved, 001-999 = error codes |
index |
Transaction index | Numeric |
sum |
Amount charged | Decimal (NIS if currency=1) |
currency |
Currency code | 1 = ILS, 2 = USD, 3 = EUR |
Rone |
Installments | Number |
Grow sends JSON POST to your webhook:
{
"transaction_id": "abc123",
"status": "success",
"amount": 150.00,
"currency": "ILS",
"payments_number": 3,
"customer": {
"name": "ישראל ישראלי",
"email": "israel@example.com",
"phone": "0501234567"
}
}IP whitelisting: Cardcom and Tranzila require your webhook server's IP to be whitelisted in their dashboard. If self-hosting n8n, use a static IP or configure a reverse proxy with a fixed egress IP.
| Provider | Data Residency | n8n Support | Notes |
|---|---|---|---|
| AWS (il-central-1) | Israel (Tel Aviv) | Full Docker support | Local zone launched 2023, full region available |
| Azure (Israel Central) | Israel | Full Docker support | israelcentral region |
| Google Cloud (me-west1) | Israel (Tel Aviv) | Full Docker support | Launched 2022 |
| Kamatera | Israel (Petah Tikva DC) | VPS with Docker | Israeli company, NIS billing |
| CloudSpace IL | Israel | VPS with Docker | Israeli company, local support |
Data residency compliance: Israeli Privacy Protection Authority (PPPA, rashut le-haganat ha-prat) regulations require personal data of Israeli citizens to remain within approved jurisdictions. For workflows that process PII (teudat zehut numbers, bank details, medical data), choose a provider with an Israeli data center.
version: '3.8'
services:
n8n:
image: n8nio/n8n:latest
restart: unless-stopped
ports:
- "5678:5678"
environment:
- N8N_BASIC_AUTH_ACTIVE=true
- N8N_BASIC_AUTH_USER=${N8N_USER}
- N8N_BASIC_AUTH_PASSWORD=${N8N_PASSWORD}
- N8N_HOST=${N8N_HOST}
- N8N_PORT=5678
- N8N_PROTOCOL=https
- WEBHOOK_URL=https://${N8N_HOST}/
- GENERIC_TIMEZONE=Asia/Jerusalem
- TZ=Asia/Jerusalem
volumes:
- n8n_data:/home/node/.n8n
- ./scripts:/home/node/scripts
volumes:
n8n_data:Critical: Set GENERIC_TIMEZONE=Asia/Jerusalem and TZ=Asia/Jerusalem. Without this, all cron triggers use UTC, and Shabbat calculations will be off by 2-3 hours (Israel is UTC+2 in winter, UTC+3 in summer with DST changes on different dates than US/EU).
Asia/Jerusalem (UTC+2/+3), and Israeli DST transitions happen on different dates than US/EU. Always set GENERIC_TIMEZONE in n8n config and verify cron timing after every DST change (typically last Friday of March and last Sunday of October).972XXXXXXXXX). A phone number like 050-1234567 must become 972501234567. Always strip the leading zero and prepend 972.amount (before VAT) and totalAmount (with VAT). Always check which field you need. Current VAT rate is 18% (as of January 2025).references/israeli-api-endpoints.md -- Complete reference table of Israeli API endpoints for n8n workflows, including Green Invoice, data.gov.il, SMS gateways, payment gateways, and Hebcal. Consult when configuring HTTP Request nodes for Israeli services.references/shabbat-cron-patterns.md -- Pre-built Shabbat-aware scheduling patterns for n8n including weekly, monthly, and holiday-aware configurations with Hebcal API integration. Consult when setting up any cron-triggered workflow that should respect Shabbat and Jewish holidays.Cause: JWT token expired. Green Invoice tokens have a short TTL (around 30 minutes).
Solution: Add a token refresh step at the beginning of every workflow execution. Store the token in n8n's static data ($getWorkflowStaticData('global')) with a timestamp, and refresh it if older than 25 minutes.
Cause: The exported CSV lacks a UTF-8 BOM (Byte Order Mark), so Excel interprets it as ANSI.
Solution: In the Function node that prepares CSV data, prepend the BOM character: '\uFEFF' + csvContent. Alternatively, set the Spreadsheet File node's encoding option to UTF-8-BOM.
Cause: Cardcom requires the callback URL to be publicly accessible with a valid SSL certificate. Self-hosted n8n behind a firewall will not receive callbacks.
Solution: Use a reverse proxy (nginx, Caddy) with Let's Encrypt SSL. Ensure the n8n WEBHOOK_URL environment variable matches the public URL. Whitelist n8n's IP in the Cardcom merchant dashboard.
Cause: n8n server timezone is set to UTC instead of Asia/Jerusalem, so the Shabbat time comparison is offset by 2-3 hours.
Solution: Verify GENERIC_TIMEZONE=Asia/Jerusalem in n8n environment variables. Restart n8n after changing timezone settings. Test by logging new Date().toString() in a Function node to confirm the server's effective timezone.
Cause: Bank scraping involves headless browser automation which can take 30-60 seconds. n8n's default Execute Command timeout is too short.
Solution: Increase the timeout in the Execute Command node settings (set to 120000ms). Ensure the n8n Docker container has sufficient memory (at least 1GB) for Chromium. Install required dependencies: apt-get install -y chromium-browser in the container.
Supported Agents
Build an n8n workflow that connects to the Green Invoice API, automatically creates tax invoices when a payment webhook is received, and handles 18% VAT correctly.
Set up an n8n workflow with a cron trigger that runs daily but automatically pauses during Shabbat and Israeli holidays, using the Hebcal API for candle lighting and havdalah times.
Create an n8n workflow that sends Hebrew SMS messages via an Israeli SMS gateway (019 or InforU) when a new order is received, including phone number conversion to +972 format.
Build an n8n workflow that uses israeli-bank-scrapers to import bank transactions and match them against Green Invoice documents for automatic bank reconciliation.
Trust Score
This skill can execute scripts and commands on your system.
1 occurrences found in code
This skill can access environment variables which may contain secrets.
8 occurrences found in code
Interactive workflow for creating new skills for the skills-il organization -- guides through category selection, use case definition, folder scaffolding, YAML frontmatter generation with bilingual metadata, instruction writing, Hebrew companion creation, and validation. Use when user asks to "create a new skill", "scaffold a skill for skills-il", "write a SKILL.md", "contribute a skill", "new skill template", or "liztor skill chadash". Do NOT use for editing existing skills or creating skills for non-skills-il platforms.
Build Hebrew voice bots and IVR systems with speech-to-text, text-to-speech, and telephony integration for Israeli businesses. Covers OpenAI Whisper Hebrew, Google Cloud STT/TTS, Azure Speech, Amazon Polly, IVR menu design for Sunday-Thursday hours, voicemail transcription, accent handling, and +972 phone integration. Do NOT use for text-based chatbots (use hebrew-chatbot-builder) or Hebrew NLP without voice (use hebrew-nlp-toolkit).
Build conversational AI chatbots with native Hebrew support, including WhatsApp Business API integration, Telegram bot scaffolding, web chat widgets, Hebrew NLP patterns, and RTL chat UI components.
Want to build your own skill? Try the Skill Creator · Submit a Skill