gapli

n8n community node for GAPLI โ€” Automated Dropshipping Platform. Manage products, orders, wholesalers, marketplace accounts and your own online store directly from your n8n workflows.

Documentation

n8n-nodes-gapli

npm version
License: MIT
n8n community

This is an n8n community node for GAPLI โ€” an automated dropshipping platform. It lets you manage products, orders, wholesalers, marketplace accounts, and multi-market regions directly from your n8n workflows.

GAPLI is a B2B SaaS platform that enables operators to run automated dropshipping businesses across marketplaces (Allegro, Erli) and e-commerce stores (WooCommerce, PrestaShop). It handles product catalogs, order fulfillment, price management, inventory synchronization, and multi-marketplace integrations โ€” all from a single dashboard.

๐ŸŒ Market-Aware: All product, wholesaler, and analytics queries can be scoped to a specific market/region (e.g. Poland, Czech Republic) using a dynamic dropdown with country flags.

n8n is a fair-code licensed workflow automation platform.


Installation ยท Nodes ยท Credentials ยท Operations ยท AI Agent Tool ยท Usage Examples ยท Compatibility ยท Resources


Installation

Follow the installation guide in the n8n community nodes documentation.

npm package name: n8n-nodes-gapli

Quick Install via n8n UI

  1. Go to Settings โ†’ Community Nodes
  2. Click Install a community node
  3. Enter n8n-nodes-gapli and click Install

Manual Install (self-hosted n8n)

cd ~/.n8n
npm install n8n-nodes-gapli

Then restart n8n.


Nodes

This package includes two nodes and one credential type:

๐ŸŸฃ GAPLI Node (Regular + AI Tool)

The main node for interacting with the GAPLI API. Supports all CRUD operations across multiple resources. Also available as an AI Agent Tool โ€” connect it to an AI Agent node and let AI manage your dropshipping operations.

โšก GAPLI Trigger Node (Polling)

A trigger node that polls the GAPLI API at regular intervals and fires your workflow when events occur:

  • New Order โ€” triggers when a new order is placed
  • Order Status Changed โ€” triggers when an order transitions between statuses
  • New Product โ€” triggers when new products appear in the catalog

Credentials

GAPLI API Key

To use this node, you need a GAPLI API key:

  1. Log in to your GAPLI Dashboard
  2. Navigate to Integrations (sidebar menu)
  3. Go to the API Keys tab
  4. Click Generate New Key
  5. Copy the key (starts with gapli_)
  6. In n8n, create new GAPLI API credentials and paste the key
Field Description
API Key Your GAPLI API key (starts with gapli_)
Base URL Default: https://gapli.com. Change only for staging/development.

The credential includes an automatic connection test that calls the /health endpoint to verify your API key.


Operations

๐Ÿ“ฆ Product

Operation Description
Get Many Retrieve a list of products from your catalog. Supports market scoping and filters: parser ID, SKU, search text, EAN/GTIN, availability, price range, stock, oversized, adult products, exclude already listed. Full Database Scan mode available.
Get by SKU Retrieve a single product by its SKU (Stock Keeping Unit).
Batch EAN Lookup Look up multiple products by EAN/GTIN barcodes in a single request (up to 100).
Batch SKU Lookup Look up multiple products by SKU identifiers in a single request (up to 100).

๐Ÿ›’ Order

Operation Description
Get Many Retrieve a list of orders. Filter by status, date range (from/to). Include Financials attaches the money result to every order on the page in the same request.
Get by ID Retrieve a single order by its numeric ID. Returns shipments[] โ€” the tracking number and link. Optional Include: Conversation (buyer messages, disputes, claims), Diagnostics (wholesaler per item, status timings, issue reason codes, warning flags) and Financials (revenue, costs, commission, refunds, operator payout). All ride along on the same request โ€” no extra HTTP calls.
Get Conversation Analysis AI conclusion for the order: outcome, root cause, what went well, what went wrong, with evidence message IDs. Paid plans only (Commerce Plan and above) โ€” returns HTTP 402 otherwise. Cached per conversation state.

๐Ÿšš shipments[] comes out of Get by ID and nowhere else. Get Many does not contain it, so
a workflow polling the list finds nothing and concludes there is no tracking. Every "tracking
number back to my own shop" flow runs through Get by ID.

โš ๏ธ Skip entries whose direction is inbound_from_wholesaler. That leg is the transport
wholesaler โ†’ GAPLI warehouse, not the parcel to the buyer, and must never be shown to the
customer. The buyer's parcel carries direction: "outgoing".

๐Ÿ’ฐ Financials

Requires the financials scope on your API key (Dashboard โ†’ Integrations โ†’ API Keys โ†’ wallet
icon). Read-only, and only your own orders.

Two numbers, on purpose. result.total_profit is the order's result; operator_result.total
is what you end up with โ€” operator pay has two parts, the marketplace commission Allegro
withholds from the payout (stays with you) and the profit share from the e-Wallet. A "total profit"
column belongs on operator_result.total.

Always check warnings before averaging anything. commission_zero_crossborder means CZ/SK/HU
orders carry no commission in our database, so their margin is overstated and not comparable
with PL
. commission_not_recovered is a written-off order whose commission Allegro never
reversed โ€” the Pool nets to zero and the loss appears nowhere else.

๐Ÿ’ฌ Message

Read-only access to buyer conversations. Requires the messages scope on your API key
(Dashboard โ†’ Integrations โ†’ API Keys โ†’ message icon). No API key can send a message to a buyer.

Operation Description
Get Many Threads Conversation threads, disputes and claims. Filter by Order ID, Source Order ID, thread type, platform, account and date range.
Get Thread A single thread with its messages.

โš ๏ธ Disputes and claims have no internal Order ID. They link to an order ONLY through
Source Order ID (the marketplace order number). Filtering by Order ID alone runs without
error and returns just the ordinary correspondence โ€” silently missing exactly the threads
that describe what went wrong.

๐Ÿ’ก Automated messages are hidden by default. GAPLI's own sends (invoice notifications,
review requests, shipping updates) are roughly half of all thread traffic. Leaving them out
keeps an AI analysis about the buyer conversation rather than about our notifications.
They are still counted in automated_messages_hidden.

๐Ÿญ Wholesaler

Operation Description
Get Many Retrieve the list of available wholesalers/suppliers, each with its industries. Supports market scoping and active status filter.

๐Ÿช Marketplace

Operation Description
Get Accounts Retrieve connected marketplace accounts (Allegro, Erli).
Get Products Retrieve products listed on marketplace accounts. Filter by account ID and platform.
Get Wholesaler Coverage Ready-made per-wholesaler counts for your Allegro accounts โ€” how many products from each wholesaler sit on each account, and how many accounts each wholesaler is spread across. Leave the account empty to cover every account in one request. Allegro only.

๐Ÿฌ Store

This node never talks to Shopify or WooCommerce. It talks to GAPLI, and GAPLI does the work
on the store side โ€” over the Shopify Admin API or the WooCommerce plugin. You say "stock my store
with these SKUs" and no access to your own store's API is involved at any point. One call looks
the same whichever engine the store runs.

Operation Description
Get Many Retrieve all stores (Shopify, WooCommerce, PrestaShop, etc.) for the authenticated operator.
Send Products Stock the store from the GAPLI catalogue. Optional pricing (percentage markup, flat markup, profit reduction) and store category IDs. Scope store:products:write. Max 100 SKUs per request.
Get Assortment What actually stands in the store, SKU by SKU, with external_id, first_seen_at, last_synced_at, never_synced and last_error. Scope store:products:read.
Get Statistics The store's own sales for a period: orders by status, revenue from paid orders, average order value, assortment size. Scope store:statistics:read.

โณ Send Products waits, and it has a 100-SKU ceiling. Shopify accepts one product per
points-metered mutation (~30 cards/min per store), so a 100-item request runs for several
minutes
. The node allows 10 minutes for it and deliberately does not retry a timeout.
Never retry it yourself either โ€” a broken wait tells you nothing about how much already
landed, and a second call stocks the store twice. Read Get Assortment instead.

โš ๏ธ On WooCommerce sent_count means HOW MANY WERE SENT, not how many the store accepted.
The plugin takes the batch asynchronously, so the response carries a warning saying exactly that.
The node returns the whole response โ€” warnings[] included โ€” so read it; confirmation only
ever comes from Get Assortment.

โš ๏ธ The store product limit applies here, exactly as it does in the panel. Over the limit the
batch is TRIMMED, and only trimmed_by_limit tells you by how much โ€” sent_count on its own
looks like a full success. limit reports the state (limit, currentCount, available). When
the limit blocks the batch entirely the request fails with HTTP 422 and the reason is now in the
error message rather than a bare "request failed".

๐Ÿ’ก In Get Assortment, read _meta.source before concluding a product is missing.
shopify_product_map is GAPLI's own dispatch register โ€” accurate to the minute.
store_snapshot is a sweep filled in round-robin that reaches some stores only once every few
days
: check _meta.snapshot_updated_at first. never_synced: true means the card is in the
store but has never received a stock sync โ€” the first place to look at "the product shows the
wrong stock". _meta is attached to every returned item, and a store holding nothing still
returns one item carrying store, total and _meta, so a stale sweep never arrives as silence.

โš ๏ธ Get Statistics is the store's own sales, not marketplace sales. Allegro and Erli orders
also carry a store_id โ€” the store their marketplace account is pinned to โ€” so a counter built on
store_id alone returns a figure several times too high and entirely believable. Average order
value is computed from paid orders only, so a cart abandoned in status "new" does not drag it
down.

๐ŸŒ Market

Operation Description
Get Many Retrieve the list of available markets/regions with country codes, currencies, and flag emojis.

๐Ÿท๏ธ Industry

Operation Description
Get Many List available product industries with wholesaler counts per industry.

๐Ÿ“Š Analytics

Operation Description
Top Products Get a ranking of best-selling products by period (7 days, 30 days, 90 days).
Sales Summary Revenue in source transaction currency (total_revenue_source_currency) and PLN (total_revenue_pln). Supports Account ID and Store ID filters for per-account scoping. Old gross/net aliases preserved but deprecated.
Stock Alerts Intelligent low-stock detection with estimated days until stockout.
Marketplace Health Allegro account performance: sync rate, listing quality, error rates.
Global Top Products ๐ŸŒ Platform-wide best-selling products across ALL operators (anonymized, quantity-based).
Global Category Trends ๐ŸŒ Wholesaler/category popularity with trend direction (up/down/stable) and % change.
Platform Stats ๐ŸŒ Platform-wide counters: orders, active operators, catalog size, marketplace accounts.
Global Price Benchmarks ๐ŸŒ Average/min/max gross prices per wholesaler for competitive price analysis.

๐Ÿ’š Health

Operation Description
Check Verify the GAPLI API status and your authentication. Returns service info, rate limits, and available endpoints.

AI Agent Tool

The GAPLI node is configured with usableAsTool: true, which means it can be used as a tool for AI Agent nodes in n8n.

How to use:

  1. Add an AI Agent node to your workflow
  2. Connect the GAPLI node as a tool
  3. The AI agent can now autonomously:
    • Search and retrieve products
    • Check order statuses
    • List marketplace accounts
    • Monitor inventory
    • Access global market intelligence

This is particularly useful for building conversational e-commerce assistants or autonomous dropshipping agents.

โš ๏ธ An agent sourcing by product name should set the Adult Products filter to exclude. A search
for "toys" walks the whole catalogue and the erotic wholesalers hold 124 products with "toy" in the
name โ€” an agent that does not set the filter will happily list vibrators alongside children's toys,
and nobody finds out until the offers are live. Every product carries is_adult, so an agent can
also branch on the field instead of trusting the name.


Usage Examples

Example 1: New Order Notification to Slack

GAPLI Trigger (New Order) โ†’ Slack (Send Message)

Set up the GAPLI Trigger with "New Order" event, then format and send order details to your Slack channel.

Example 2: Daily Inventory Check

Schedule Trigger (Daily) โ†’ GAPLI (Get Many Products, available=true) โ†’ Google Sheets (Append)

Automatically export your available inventory to a Google Sheet every day.

Example 3: Order Status Tracking

GAPLI Trigger (Order Status Changed) โ†’ IF (status=shipped) โ†’ Email (Send)

Send an email notification when orders are shipped.

Example 4: AI-Powered Product Assistant

Chat Trigger โ†’ AI Agent โ†’ GAPLI Tool (Products/Orders)

Build a conversational assistant that can answer questions about your products, orders, and inventory using natural language.

Example 5: Global Market Intelligence Report

Schedule Trigger (Weekly) โ†’ GAPLI (Global Top Products + Platform Stats) โ†’ Email (Send Report)

Generate a weekly market intelligence report with platform-wide bestsellers and performance trends.


Compatibility

Requirement Version
n8n v1.0.0 or higher
Node.js v22 or higher
GAPLI API v1.0

Tested on n8n self-hosted and n8n Cloud.


Resources


Version History

0.8.0 (2026-05-02)

  • ๐ŸŒ New: Market Selector โ€” dynamic dropdown with country flag emojis on Product, Wholesaler, Analytics, and Marketplace resources. Scope queries to specific regions (e.g. ๐Ÿ‡ต๐Ÿ‡ฑ Poland).
  • ๐ŸŒ New: Market Resource โ€” Get Many operation to list all available markets with country codes, currencies, and flags.
  • ๐Ÿ”Ž New: Batch EAN Lookup โ€” look up multiple products by EAN/GTIN barcodes in a single POST request (up to 100).
  • ๐Ÿ”Ž New: Batch SKU Lookup โ€” look up multiple products by SKU identifiers in a single POST request (up to 100).
  • โšก New: Trigger Market Filter โ€” scope "New Product" trigger to a specific market/region.
  • ๐Ÿ”„ Backward Compatible โ€” Market selector defaults to "All Markets" (no filter). Existing workflows work unchanged.

0.7.0 (2026-04-27)

  • โœจ New: Max Items Safety Parameter โ€” control how many products Full Database Scan returns (100โ€“50,000)
  • โœจ New: Pagination Metadata (_meta) โ€” every product includes scan context data
  • ๐Ÿ› Fix: manufacturer column crash โ€” dynamic column existence checking
  • ๐Ÿ› Fix: Silent error swallowing โ€” parser errors now logged

0.6.0 (2026-04-26)

  • ๐Ÿ› Critical Fix: Full Database Scan + Search HTTP 500 โ€” name column dynamically checked; search falls back to SKU-only for partitions without name
  • ๐Ÿ› Critical Fix: Search + Exclude Already Listed HTTP 500 โ€” same root cause + 50K SKU safety cap
  • โœจ New: EAN/GTIN Exact Match Filter โ€” search by exact barcode
  • โœจ New: Exclude Metadata โ€” _exclude_meta in response for filter verification
  • ๐Ÿ’ก Improved: UI Hints โ€” Full Database Scan and Exclude Already Listed descriptions enhanced

0.5.0 (2026-04-26)

  • โœจ New: Parser-First Pagination โ€” Full Database Scan no longer truncates at 50K; iterates per-parser
  • โœจ New: Has EAN/GTIN Filter โ€” return only products with valid EAN
  • โœจ New: Exclude Parser IDs โ€” skip specific wholesaler parsers
  • โœจ New: Category IDs in Response โ€” category_ids field added to product output

0.4.0 (2026-04-25)

  • โœจ New: Full Database Scan Mode โ€” bypass pagination limits, scan all parser partitions
  • โœจ New: Wholesaler Dropdown โ€” searchable dropdown replacing numeric Parser ID input

0.3.0 (2026-04-24)

  • โœจ New: Server-Side Product Filters โ€” 5 filters applied before pagination: stock_min, price_gross_min, price_gross_max, exclude_oversized, exclude_already_listed_on_accounts
  • โœจ New: Global Analytics โ€” 4 platform-wide operations for market intelligence:
    • Get Global Top Products, Get Global Category Trends, Get Platform Stats, Get Global Price Benchmarks

0.2.0 (2026-04-22)

  • โœจ New: Store Resource โ€” retrieve operator stores
  • โœจ New: Industry Resource โ€” browse product industries with wholesaler counts
  • โœจ New: Analytics Resource โ€” 4 operations: Top Products, Sales Summary, Stock Alerts, Marketplace Health
  • ๐Ÿ”ง Enhanced: Orders โ€” added marketplace_account_name field showing Allegro/Erli account name

0.1.0 (2026-04-22)

  • ๐ŸŽ‰ Initial release
  • GAPLI Node with Product, Order, Wholesaler, Marketplace, and Health resources
  • GAPLI Trigger Node with polling support for New Order, Order Status Changed, and New Product events
  • AI Agent Tool support (usableAsTool)
  • GapliApi credentials with connection testing
  • Professional SVG icons (light & dark mode)

License

MIT โ€” ยฉ 2026 GAPLI Global LTD

Discussion