MESA Docs
MESA Homepage
  • Welcome to MESA
    • Installing MESA
    • Dashboard
    • Core Concepts
    • Getting Help
  • Templates
    • Template Library
    • Installing & Editing
  • Workflow Builder
    • Triggers
    • Actions
    • Fields
      • Variables
      • Formatting Variables
      • Liquid Templating
    • Testing
  • Workflow Activity
    • Tasks
      • Troubleshooting
      • Replay
    • Logs
    • Time Travel
  • Best Practices
    • Set Titles & Descriptions
    • Track Time Saved
    • Enable Failure Notifications
    • Avoid Infinite Loops
  • Going Further
    • Plans & Billing
    • Notifications
    • Credentials
    • Understanding the Queue
    • Export & Import Workflows
    • Platform Thresholds & Limits
  • Built-in Tools
    • Activity Log
    • AI
    • API
    • Approval
    • MCP
    • Custom Code
      • Libraries
        • MESA SDK
        • Filter
        • Loop
        • Transform
        • oAuth
        • Shopify
        • ShopifyGraphql
      • FAQ
    • Data
    • Delay
    • Email
    • Filter
    • Form
      • Configure
      • Going Further
      • Technical Notes
    • FTP
    • Image
    • Loop
    • Package Tracking
    • Paths
    • Schedule
    • Scraper
    • SMS
    • Transform
    • Virtual Output
    • Weather
    • Web Request
    • Webhook
  • Apps
    • Airtable
    • Amazon S3
    • Asana
    • Blog Studio
    • ChannelApe
    • Claude
    • ChatGPT
    • Dall-E 2
    • Delighted
    • Digital Humani
    • Discord
    • DocuSign
    • Dropbox
    • Etsy
    • Facebook
    • Fera.ai
    • Gatsby
    • Gmail
      • Send Email
    • Google Analytics 4
    • Google Analytics UA
    • Google Calendar
    • Google Drive
    • Google Forms
    • Google Sheets
      • Add Row
      • Query Rows
      • Update Row
      • Row Created
      • Row Updated (Advanced)
      • Creating New Spreadsheets
      • Technical Notes
    • Gorgias
    • Govalo
    • Help Scout
    • Hubspot
    • Infinite Options
    • Intercom
    • IPDetective
    • Judge.me
    • Katana
    • Klaviyo
      • API Deprecation
    • Loop Returns
    • Loyalty Lion
    • Mailchimp
    • Mailgun
    • Mandrill
    • Mantle
    • Notion
    • Odoo
    • Omnisend
    • Page Studio
    • Pinterest
    • Printful
    • PrintNode
    • QuickBooks
    • Rebuy
    • Recharge
    • Remove.bg
    • Returnly
    • Rivo
    • Salesforce
    • Segment
    • Sendlane
    • Shippo
    • ShipStation
    • Shopify
      • Technical Notes
        • Configuring Your Payload
        • Modifying and Filtering Get Lists
        • Parameters
        • Error Codes
        • Accuracy of orders_count Variable
        • Accuracy of Count Products Action
        • Using the Gift Cards API
        • How to Find a Specific Record in the Testing Interface
        • Order, Customer, and Product Updated Trigger Frequency
    • Shopify Flow
    • Shopify Plus
    • Shopify Retail POS
    • Skio Subscriptions
    • Slack
    • Smartrr
    • Smile.io
    • Square
      • Updating Inventory
      • Frequently Asked Questions
    • Stamped.io
    • Stripe
    • Thanks.io
    • TikTok
    • Tracktor
    • Twilio
    • Uploadery
    • Wonderment
    • Xero
    • Yotpo
    • Yotpo Loyalty
  • For developers
    • Admin API
    • Command Line Interface
    • Embedding templates
  • Frequently asked questions
    • Why isn't the log search returning logs with the search I entered?
    • Is it possible to handle errors or retry steps?
    • How do I handle a failed task?
    • Does MESA auto-save workflows?
    • Can I Use Apps That Don't Have a MESA Connector?
    • Why is my workflow action adding the same data each time it occurs?
    • How do I cancel automations that are already in progress?
    • How do I cancel my MESA subscription or 7-day trial?
    • Can you import code from npm in custom code?
    • Do you have a Slack Community?
Powered by GitBook
On this page
  • Authentication
  • Configuration
  • Fetch File triggers
  • File Name
  • Move File After Successful Read
  • Scheduled Time
  • Going Further
  • Save FTP File action
  • Technical Notes

Was this helpful?

  1. Built-in Tools

FTP

PreviousTechnical NotesNextImage

Last updated 1 month ago

Was this helpful?

The FTP (File Transfer Protocol) tool allows you to download and upload files to a specified FTP server. With MESA, you can map the data to a format that Shopify or another system expects and pass it along to the next step. Sharing CSV and other files via FTP servers is a great choice to connect your fulfillment service, product manager, or another third-party system to Shopify. MESA supports both FTP and SFTP (secure FTP) protocols.

Please note: At this time, MESA does not support SSH keys for FTP.

Authentication

Your hosting service should have details for all fields required to .

Once all the details have been filled in, click Add Credential to connect your FTP with MESA.

Configuration

Fetch File triggers

You can begin a workflow by fetching a FTP, XML, or CSV file on a scheduled basis.

Once you have selected your preferred FTP trigger, there are fields available to complete:

File Name

Enter the path to the file on your FTP server.

To check if you have correctly entered your path, you can click on the Retrieve File button to test.

If MESA cannot locate your file, an error will display, stating that the file is not found or could not be read. To fix this, please adjust the text entered into the File Name field.

Move File After Successful Read

In the below screenshot, the "processed" folder stores all files that have been read.

For our example, we have inputted: processed/orders/{{file}}

Scheduled Time

Towards the bottom of the configuration, you can configure how often you'd like your workflow to run. Make sure to click the Save button to save your changes.

Going Further

Save FTP File action

In the File Name field, you can input your preferred name of the file that will be sent to your FTP server.

Example: products/all-products-{{ "now" | date: "_%m_%d_%Y_%I_%M_%S_%p" }}.csv will create a file in the products folder, with the name all-products-_07_12_2024_09_48_54_AM.csv

Advanced Data Mapping

For more advanced mapping, you can also use the Edit Code button on the FTP action, then add in your own data mapping.

script = (payload, context) => {
  // Adjust `payload` here to alter data before we transform it.

  // Alter the payload data based on our transform rules
  let csvRows = [];

  payload.forEach(product => {
    csvRows.push({
      id: product.id, 
      title: product.title, 
      handle: product.handle, 
      status: product.status
    });
  });

  // Adjust `output` here to alter data after we transform it.
  const csvOutput = Mesa.csv.encode(csvRows, true);

  // We're done, call the next step!
  Mesa.output.next(csvOutput);
}

Technical Notes

Fetch CSV File Row Created Trigger

  • This trigger can support a CSV file with over 10,000 rows.

  • Our queue will batch 50 rows at a time. After those 50 rows are processed, the next 50 will be enqueued. This continues until all rows have been processed.

  • We do not recommend parallel processing for this trigger as it can disrupt the enqueuing logic.

  • For CSV files with more than 1,000 rows, avoid using short schedule intervals as this may conflict with existing runs. For files over 1,000 rows, set the schedule to approximately 1 hour. For files with 10,000+ rows, keep schedule times several hours apart to prevent double booking

  • Unlike other triggers that support enqueueing multiple files, this trigger only enqueues one file at a time.

Query Rows Action

  • You can query rows based on specific rulesets.

Add or Update Rows in CSV Action

  • Row ID is used as a primary key for querying and updating. While it should be an ID, it can be any value. If a match is found with the Row ID, the existing row will be updated. If no match is found, a new row will be added. If there are multiple rows that match the same ID all matching rows will be updated.

Optionally, you can use wildcards (*) to match portions of the path if the path is dynamic. If you are familiar with regular expressions, you can test the wildcard placement on a third-party website (e.g. ) to ensure that the pattern matches the file path.

If selected, the file will be moved after MESA successfully reads it. This is useful if you have a dedicated directory/folder to store read files so your FTP server is organized. This can be found by selecting the button.

For the Moved File Name field, you can use the {{file}} which is from the file name. For example, if the file name value is orders/Order*.csv, and the found file was orders/Order-1234.csv, {{file}} would resolve to Order-1234.csv.

.

In the Data Mapping section, you can map out the data sent to your FTP server by utilizing .

The following code will take a list of Shopify products, and create CSV file content from them. The Mesa.csv.encode() method is used to convert the data into CSV format. See the MESA Script SDK for more details.

regex101
More fields
Variable
MESA's Variables feature
documentation
File Name
Move File After Successful Read
Scheduled Time
Advanced Data Mapping
connect your FTP with MESA
Learn more about formatting dates with Liquid