FTP, NetSuite and Slack: Supplier Feed Import Template
On a schedule, download a supplier CSV from an FTP server, upsert the items into NetSuite, and post an import summary to Slack.
What It Builds
This Spojit template runs on a Schedule trigger. At each run it uses the ftp connector to download the latest supplier feed file, parses the CSV rows, then loops over them and upserts each item into NetSuite with the netsuite connector. When the import finishes, a slack connector step posts a summary (rows read, items created or updated, and any rows that failed) to your chosen channel.
The result is a hands-off nightly supplier catalog sync: your team wakes up to fresh item data in NetSuite and a single Slack message confirming exactly what changed, instead of manually pulling files and keying them in.
The Prompt
Paste this into Miraxa, the intelligent layer across your automation, and it builds the workflow, connecting the tools for you:
Build a workflow that runs every weekday at 6am Australia/Sydney time. Use the FTP connector to download the latest supplier feed CSV from /incoming/supplier-feed.csv, parse it into rows, then loop over each row and upsert the item into NetSuite by SKU. After the loop, post a message to the #inventory channel in Slack summarizing how many rows were read, how many items were created or updated, and how many failed.
Connectors Used
- Schedule trigger - fires on a 5-field cron with an IANA timezone (for example
0 6 * * 1-5inAustralia/Sydney). - ftp -
download-filepulls the supplier CSV;list-directoryandget-file-infohelp you target the right file. - csv -
parseturns the downloaded file into rows you can loop over. - netsuite -
upsert-recordcreates or updates each item;get-itemcan look up an existing record first if you prefer. - slack -
send-messageposts the import summary to your channel.
Customize It
Change the cron and timezone to match your supplier's drop time, swap /incoming/supplier-feed.csv for your real path, and point the summary at a different channel by editing #inventory. If your feed keys items by an internal ID rather than SKU, tell Miraxa which column to match on, and tighten the summary to call out specific failure reasons if you want more detail per run.
Tips
- Keep the NetSuite step in Direct mode on the netsuite connector so each upsert is deterministic and costs no AI credits. Reserve Agent mode for rows that need judgment, such as mapping inconsistent supplier categories.
- Use the csv connector's
parsetool before the Loop node so each iteration receives one clean row, and reference fields as{{ row.sku }}and{{ row.price }}. - Have the FTP step download into a workflow variable and confirm the file exists with
get-file-infobefore parsing, so an empty or missing feed fails clearly instead of importing nothing.
Common Pitfalls
- If the supplier overwrites the same filename each day, an old file can be re-imported when the new drop is late. Check
get-file-infofor a recent modified time, or read from a dated path, before running the upsert loop. - Schedule triggers use the timezone you set, not your browser's. A cron of
0 6 * * 1-5inAustralia/Sydneyis a different moment than the same cron inUTC, so set the IANA timezone explicitly. - Large feeds can hit per-run limits and slow each loop iteration. Slice the CSV or split the import across runs if a single file holds thousands of rows.
Related
- How to Sync Shopify Orders to NetSuite shows the same upsert-into-NetSuite pattern from a different source.
- How to Schedule a Daily Inventory Sync covers the scheduled, hands-off run model in depth.
- How to Validate and Clean CSV Data Before Import helps you guard against bad supplier rows.