← Back to Skills Marketplace
michaelastreikosynder

GL importer

by Synder · GitHub ↗ · v1.0.1 · MIT-0
cross-platform ✓ Security Clean
246
Downloads
2
Stars
0
Active Installs
2
Versions
Install in OpenClaw
/install gl-importer
Description
Import CSV/XLSX accounting data into QuickBooks Online or Xero via the Synder Importer REST API. Use when asked to import invoices, bills, journal entries, c...
README (SKILL.md)

Synder Importer API

Import CSV/XLSX files into QuickBooks Online or Xero.

Setup

Getting an API Token

If the user doesn't have a token yet, guide them through these steps:

  1. Create an account at importer.synder.com and confirm your email
  2. Connect your accounting software — in the web UI, link QuickBooks Online or Xero via OAuth
  3. Generate an API key — go to Account → API Keys, click Generate. Copy the token immediately — it's shown only once
export IMPORTER_API_TOKEN="your_token_here"
export BASE="https://importer.synder.com/api/v1"

Trial users: Imports are limited by row count without a paid subscription. No subscription is required to use the API itself.

Data Privacy

  • Homepage: importer.synder.com | Docs: importer.synder.com/apidocs
  • Operator: Synder Technologies Inc. — synder.com
  • What's sent: CSV/XLSX files containing accounting data (invoices, bills, journal entries, etc.) are uploaded to importer.synder.com and forwarded to your connected accounting provider (QuickBooks Online or Xero)
  • Retention: Uploaded files are stored for import processing only and are not retained after import completion. Import logs (row counts, status, error messages) are retained for your account history.
  • Scope: API tokens are scoped to a single user account and its connected companies. Tokens can be revoked at any time from the web UI.
  • Recommendation: Always use dryRun=true first to preview before importing live data. Use non-production data for initial testing.

Quick Reference

Action Method Endpoint
Account info GET /account
List companies GET /companies
Company settings GET/POST /companies/{id}/settings
List entities GET /companies/{id}/entities
Entity fields GET /companies/{id}/entities/{name}/fields
Create mapping POST /companies/{id}/mappings
List mappings GET /companies/{id}/mappings
Update mapping PUT /companies/{id}/mappings/{mid}
Delete mapping DELETE /companies/{id}/mappings/{mid}
Execute import POST /companies/{id}/imports
Auto-import POST /companies/{id}/imports/auto
List imports GET /companies/{id}/imports
Import status GET /companies/{id}/imports/{iid}
Cancel import POST /companies/{id}/imports/{iid}/cancel
Revert import POST /companies/{id}/imports/{iid}/revert
Import results GET /companies/{id}/imports/{iid}/results

Core Workflow

1. Find the company

curl "$BASE/companies" -H "Authorization: Bearer $IMPORTER_API_TOKEN"

Response is an array. Pick the company with status: "ACTIVE". Save its id.

2. Choose entity and check fields

Common entities: Invoice, Bill, JournalEntry, Customer, Vendor, Expense, SalesReceipt, Payment, CreditMemo

curl "$BASE/companies/$CID/entities/$ENTITY/fields" -H "Authorization: Bearer $IMPORTER_API_TOKEN"

Fields with isRequired: true MUST be mapped. Fields with isForGrouping: true (e.g., DocNumber) combine multiple CSV rows into one entity (multi-line invoices).

Important: Check GET /companies/{id}/settings for dateFormat (e.g., MM/dd/yyyy). CSV date columns must match this format or the import will fail. Update with POST /companies/{id}/settings if needed.

3. Option A: Smart Auto-Import (recommended)

Skip manual mapping — auto-match CSV headers to fields:

curl -X POST "$BASE/companies/$CID/imports/auto" \
  -H "Authorization: Bearer $IMPORTER_API_TOKEN" \
  -F "[email protected]" \
  -F "entityName=Invoice" \
  -F "dryRun=true"
  • dryRun=true (default): Returns proposed mapping without importing. Check missingRequired array — if empty, safe to import. Response: proposedFields, missingRequired, totalFieldsMapped.
  • dryRun=false: Maps AND imports in one call. Returns {"id": "42", "status": "SCHEDULED", "mappingId": "33", ...} — use the id to poll for completion (same as step 5).

Confidence levels in proposedFields: high = exact title match, medium = matched via alternative title. Review medium matches before importing with dryRun=false.

3. Option B: Manual Mapping

Create a mapping linking CSV columns to entity fields:

curl -X POST "$BASE/companies/$CID/mappings" \
  -H "Authorization: Bearer $IMPORTER_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "My Invoice Mapping",
    "entityName": "Invoice",
    "fields": [
      {"sourceFieldTitle": "Invoice #", "targetFieldId": "231"},
      {"sourceFieldTitle": "Customer",  "targetFieldId": "176"},
      {"sourceFieldTitle": null, "targetFieldId": "234", "fixedValue": "Imported via API"}
    ]
  }'
  • sourceFieldTitle: CSV column header name
  • targetFieldId: from the fields endpoint
  • fixedValue: constant value for every row (set sourceFieldTitle to null)

4. Upload and Execute Import

curl -X POST "$BASE/companies/$CID/imports" \
  -H "Authorization: Bearer $IMPORTER_API_TOKEN" \
  -H "Idempotency-Key: $(uuidgen)" \
  -F "[email protected]" \
  -F "mappingId=$MAPPING_ID"

Returns 202 with status: "SCHEDULED". Always send Idempotency-Key to prevent duplicate imports on retry.

5. Poll for Completion

curl "$BASE/companies/$CID/imports/$IMPORT_ID" -H "Authorization: Bearer $IMPORTER_API_TOKEN"

Terminal statuses: FINISHED, FINISHED_WITH_WARNINGS, FAILED, CANCELED.

Poll with exponential backoff: start 2s, multiply 1.5x, cap 30s.

6. Check Results

# All results
curl "$BASE/companies/$CID/imports/$IMPORT_ID/results" -H "Authorization: Bearer $IMPORTER_API_TOKEN"

# Errors only
curl "$BASE/companies/$CID/imports/$IMPORT_ID/results?type=ERROR" -H "Authorization: Bearer $IMPORTER_API_TOKEN"

Result types: INFO (success), WARNING, ERROR.

File Requirements

  • CSV: UTF-8, comma-delimited, header row required, max 50MB
  • XLSX: First sheet by default (use sheetName param for others), header row required, max 50MB

Error Handling

All errors return {"error": {"code": "...", "message": "..."}}.

Code HTTP Action
UNAUTHORIZED 401 Check/refresh API token
NOT_FOUND 404 Verify company/mapping/import/entity ID
BAD_REQUEST 400 Check request format, file validity, provider connection
VALIDATION_ERROR 422 Map all required fields — call GET .../fields to see which
DUPLICATE_REQUEST 409 Same Idempotency-Key reused within 24h — use new UUID
CONFLICT 409 Import not in valid state for cancel/revert
RATE_LIMITED 429 Wait Retry-After header seconds, then retry

Rate Limits

  • Standard: 60 requests/minute per account
  • Imports: 30 imports/hour per company

Check X-RateLimit-Remaining header. On 429, wait Retry-After seconds.

Tips

  • Use dryRun=true on auto-import before committing — all operations hit live accounting data
  • Revert mistakes with POST .../imports/{id}/revert (deletes created entities from QBO/Xero)
  • alternativeTitles on fields show what CSV headers auto-mapping recognizes
  • For multi-line entities (invoices with line items), use a grouping field (DocNumber) — rows with same value become one entity
  • Paginated endpoints accept page and perPage (max 100, default 20)

Full API Details

For complete field schemas, response examples, and OpenAPI spec: see references/api.md

Usage Guidance
This skill appears coherent and implements the expected workflow for importing spreadsheets into QuickBooks Online/Xero via Synder. Before installing: 1) only provide an IMPORTER_API_TOKEN from importer.synder.com and verify you trust Synder's service and privacy policy (uploads contain sensitive financial data that will be forwarded to your accounting provider); 2) follow the SKILL.md recommendation to run dryRun=true and test with non-production data; 3) confirm you select the correct company ID when importing; 4) be prepared to revoke the API token from the Synder web UI if you no longer want the skill to have access. There are no hidden installs or unrelated credential requests, but remember that using the skill will send spreadsheet contents to a third party (Synder) for processing.
Capability Analysis
Type: OpenClaw Skill Name: gl-importer Version: 1.0.1 The gl-importer skill is a legitimate integration for importing accounting data into QuickBooks Online or Xero via the Synder Importer REST API (importer.synder.com). The documentation in SKILL.md and references/api.md provides clear, functional instructions for mapping and uploading CSV/XLSX files, including safety recommendations like using dry runs and idempotency keys, with no evidence of malicious intent or data exfiltration.
Capability Assessment
Purpose & Capability
Name/description, README instructions, and the referenced API docs consistently describe importing spreadsheet accounting data into QuickBooks Online or Xero via the Synder Importer API. The single required credential (IMPORTER_API_TOKEN) is appropriate for that API and no unrelated secrets/binaries are requested.
Instruction Scope
SKILL.md gives explicit curl-based workflows for listing companies, mapping fields, uploading files, polling status, canceling/reverting imports, and recommends dryRun first. It only references the CSV/XLSX files to upload and the provider account context; it does not instruct reading unrelated system files or exfiltrating data to unknown endpoints. It clearly documents that files are uploaded to importer.synder.com and forwarded to the connected accounting provider.
Install Mechanism
Instruction-only skill with no install spec and no code files. No downloads or package installs are performed by the skill, so there is no install-time execution risk.
Credentials
Only IMPORTER_API_TOKEN is required (documented in SKILL.md). That token is necessary and proportionate for authenticating to the Synder Importer API. No other secrets, config paths, or unrelated service tokens are requested.
Persistence & Privilege
Skill is not always-enabled and does not request system persistence or modify other skills. It relies on outbound HTTP calls to the documented API, which is expected for its purpose. Autonomous model invocation is allowed by platform default but is not combined with elevated privileges here.
How to Use
  1. Make sure OpenClaw is installed (local or Docker)
  2. Run the install command in chat: /install gl-importer
  3. After installation, invoke the skill by name or use /gl-importer
  4. Provide required inputs per the skill's parameter spec and get structured output
Version History
v1.0.1
gl-importer 1.0.1 - Renamed skill from "importer" to "gl-importer". - Added API key requirement details and guidance for generating/importing the `IMPORTER_API_TOKEN`. - Clarified that this skill is import-only; does not support reading/exporting from QuickBooks Online or Xero. - Added a Data Privacy section describing file handling, retention, and security practices. - Included instructions for handling date formats and updating company settings for successful imports. - Improved documentation with setup steps, clearer option breakdowns, and highlighted best practices and limitations for safer imports.
v1.0.0
Initial release of the gl-importer (importer) skill: - Enables importing CSV/XLSX accounting data into QuickBooks Online or Xero via the Synder Importer REST API - Supports invoices, bills, journal entries, customers, vendors, and other accounting data - Handles field mapping (manual or smart auto-mapping), file upload, import execution, and status/results retrieval - Includes error handling, import revert, and rate-limiting guidelines - Provides detailed API references and workflow instructions
Metadata
Slug gl-importer
Version 1.0.1
License MIT-0
All-time Installs 0
Active Installs 0
Total Versions 2
Frequently Asked Questions

What is GL importer?

Import CSV/XLSX accounting data into QuickBooks Online or Xero via the Synder Importer REST API. Use when asked to import invoices, bills, journal entries, c... It is an AI Agent Skill for Claude Code / OpenClaw, with 246 downloads so far.

How do I install GL importer?

Run "/install gl-importer" in the OpenClaw or Claude Code chat to install it in one step — no extra setup required.

Is GL importer free?

Yes, GL importer is completely free, licensed under MIT-0. You can download, install and use it at no cost.

Which platforms does GL importer support?

GL importer is cross-platform and runs anywhere OpenClaw / Claude Code is available (cross-platform).

Who created GL importer?

It is built and maintained by Synder (@michaelastreikosynder); the current version is v1.0.1.

💬 Comments