> For the complete documentation index, see [llms.txt](https://docs.rishvi.co.uk/linnworks/llms.txt).
> Use it to discover all available pages before exploring further.

# Shipping Label Print to FTP

Automatically generate shipping label PDFs for selected open orders in Linnworks and upload them to a configured FTP location for external access, storage, or downstream fulfilment workflows.

Manually printing shipping labels and uploading them to an external location can be time-consuming, especially when handling high order volumes. The *Shipping Label Print to FTP* macro helps automate this process by finding eligible open orders, generating shipping label PDFs, and saving them directly to a configured FTP server.

This macro checks open orders from the last 24 hours, filters them by configured order identifiers, generates shipping label PDFs for orders where labels have not yet been printed, and uploads each PDF file to the specified FTP folder.

With this automated approach, your team can reduce manual label handling, improve fulfilment efficiency, and ensure shipping labels are available in a central FTP location for warehouse, courier, or integration workflows.

> Automatically generate and upload shipping labels to FTP so your fulfilment team can access them without manual downloads.

## **Configure the Macro**

Once the app is installed, you need to set up the macro configuration so the system knows which orders to check, which identifiers to include, and where the generated shipping label PDFs should be uploaded.

This configuration can be updated anytime if your FTP details, identifiers, or fulfilment workflow changes.

### **Steps to Configure**

<Tabs>
  <Tab title="Step 1">
    **Go to Apps > Macro Configuration and click + Add new configuration.**

    <Image src="https://blob-cdn.documentation.ai/org-87fb0951-1e07-4f5d-a887-8a7327c7777d/doc-98941d2e-0032-424f-8414-3034ac5fa6ee/1779102744235-wjj68djk9u-pasted-image-1779102707726.png?fm=auto&auto=compress%2Cformat" width="1368" height="568" alt="" priority={true} fetchPriority="high" />
  </Tab>

  <Tab title="Step 2">
    **Select the Shipping Label Print to FTP macro and click Create Configuration.**

    <Image src="https://blob-cdn.documentation.ai/org-87fb0951-1e07-4f5d-a887-8a7327c7777d/doc-98941d2e-0032-424f-8414-3034ac5fa6ee/1779103891745-7iq1v2tia8-pasted-image-1779103888164.png?fm=auto&auto=compress%2Cformat" width="1033" height="459" alt="" priority={true} fetchPriority="high" />

    This creates a new configuration where you can define the schedule and FTP connection parameters.
  </Tab>

  <Tab title="Step 3">
    **In the Macro Configuration screen, go to the Schedules tab and click New Schedule.**

    <Image src="https://blob-cdn.documentation.ai/org-87fb0951-1e07-4f5d-a887-8a7327c7777d/doc-98941d2e-0032-424f-8414-3034ac5fa6ee/1779106178703-qtps8fvuq09-pasted-image-1779106174293.png?fm=auto&auto=compress%2Cformat" width="677" height="515" alt="" style="width: 677px; height: auto; cursor: pointer; margin: 0 auto;" />
  </Tab>

  <Tab title="Step 4">

    **Configure the schedule settings.**

    <Image src="https://blob-cdn.documentation.ai/org-87fb0951-1e07-4f5d-a887-8a7327c7777d/doc-98941d2e-0032-424f-8414-3034ac5fa6ee/1779104120869-e0s5sa3xdg7-pasted-image-1779104117204.png?fm=auto&auto=compress%2Cformat" width="603" height="555" alt="" />

    In the **Schedule Config** window, enter the **Name**

    - Select **Schedule type** from the dropdown:

      - **One time** — runs only once

      - **Recurring** — runs repeatedly based on schedule

    - If **Recurring** is selected:

      - In **Frequency**, choose **Occurs** from the dropdown:

        - **Daily**

        - **Weekly**

    - Set the **Recurs every** value, such as 1 day or 1 week

    - Set the **Starting on** date and time

    - Under **Daily frequency**, choose one option:

      - **Occurs once at** → specify an exact time

      - **Occurs every** → enter an interval in hours and define:

        - **Starting time**

        - **Ending time**

    - Review the **Summary** section

    - Click **Save**
  </Tab>

  <Tab title="Step 5">
    **Navigate to the Parameters tab and enter the required values.**

    <Image src="https://blob-cdn.documentation.ai/org-87fb0951-1e07-4f5d-a887-8a7327c7777d/doc-98941d2e-0032-424f-8414-3034ac5fa6ee/1779104203254-kzhulwo46x-pasted-image-1779104199377.png?fm=auto&auto=compress%2Cformat" width="603" height="517" alt="" style="width: 603px; height: auto; cursor: pointer;" />

    \- Go to the **Parameters** tab

    **Example:**\
    \
     \- Enter the required values in the **Value** column:\
    \
     \- **FTPFilePath** = `/shipping-labels`\
    \
     \- **FTPPassword** = `demoPassword123`\
    \
     \- **FTPPort** = `21`\
    \
     \- **FTPServer** = `ftp.example.com`\
    \
     \- **FTPSSL** = unchecked / false\
    \
     \- **FTPUserName** = `demo_user`\
    \
     \- **identifier** = `Express`\
    \
     \- Confirm all required values are completed\
    \
     \- Click **Save** to apply the configuration
  </Tab>

  <Tab title="Step 6">
 **Make sure to enable the macro to continue with the schedule Engine configuration.**

    <Image src="https://blob-cdn.documentation.ai/org-87fb0951-1e07-4f5d-a887-8a7327c7777d/doc-98941d2e-0032-424f-8414-3034ac5fa6ee/1783500691225-1dfb7e9ernw-EnableSchedule.pngvdfv?fm=auto&auto=compress%2Cformat" width="717" height="630" alt="" />
  </Tab>

  <Tab title="Step 7">
    **Make sure to enable the macro so it can run from the configured schedule.**

    <Image src="https://blob-cdn.documentation.ai/org-87fb0951-1e07-4f5d-a887-8a7327c7777d/doc-98941d2e-0032-424f-8414-3034ac5fa6ee/1779106024977-vhhzcrirl9n-pasted-image-1779106021058.png?fm=auto&auto=compress%2Cformat" width="1274" height="27" alt="" />
  </Tab>
</Tabs>

## **Key Benefits**

Printing labels and manually moving them to an external storage location can slow down order fulfilment. This macro automates the process by generating shipping label PDFs and uploading them directly to FTP.

<Columns cols="2">
  <Card title="Automate Label Generation" icon="alarm-check" horizontal="false" target="_self">
    Generates shipping label PDFs automatically for eligible open orders without requiring manual label downloads.
  </Card>

  <Card title="Upload Labels to FTP" icon="boxes" horizontal="false" target="_self">
    Saves generated label PDFs directly to the configured FTP folder using the order number as the file name.
  </Card>

  <Card title="Process Only Relevant Orders" icon="bell" horizontal="false" target="_self">
    Filters open orders by configured Linnworks identifiers so only matching orders are processed.
  </Card>

  <Card title="Avoid Duplicate Label Work" icon="bar-chart-big-icon" horizontal="false" target="_self">
    Checks whether the shipping label has already been printed and processes only orders where the label has not yet been printed.
  </Card>

  <Card title="Improve Fulfilment Speed" icon="lucide-fast-forward" horizontal="false" target="_self">
    Makes labels available in a shared FTP location for warehouse teams, courier systems, or external workflows.
  </Card>

  <Card title="Track Upload Results" icon="lucide-message-circle-x" horizontal="false" target="_self">
    Logs successful FTP uploads, failed FTP uploads, and any errors that occur during macro execution.
  </Card>
</Columns>

### How It Works

This macro runs in the background based on the configured schedule. It checks open orders from the last 24 hours, finds orders matching the configured identifiers, generates shipping labels, and uploads the PDF files to FTP.

<Steps>
  <Step title="Step 1" icon="airplay-icon" title-type="p">
    The macro starts execution and writes **Macro started** to the log.
  </Step>

  <Step title="Step 2" icon="airplay-icon" title-type="p">
    It creates a date filter covering orders from the last 24 hours using the general order date field.
  </Step>

  <Step title="Step 3" icon="airplay-icon" title-type="p">
    The macro retrieves open orders from Linnworks using the configured date filter.
  </Step>

  <Step title="Step 4" icon="airplay-icon" title-type="p">
    It splits the **identifier** parameter into a list and checks each order for matching Linnworks identifiers.
  </Step>

  <Step title="Step 5" icon="airplay-icon" title-type="p">
    Orders are filtered to include only those where the shipping label has not already been printed.
  </Step>

  <Step title="Step 6" icon="airplay-icon" title-type="p">
    For each eligible order, the macro generates a shipping label PDF using the **Shipping Labels** print template.
  </Step>

  <Step title="Step 7" icon="airplay-icon" title-type="p">
    The generated PDF is downloaded from the print response URL and converted into a byte file.
  </Step>

  <Step title="Step 8" icon="airplay-icon" title-type="p">
    The PDF is uploaded to the configured FTP path using the order number as the file name.
  </Step>

  <Step title="Step 9" icon="airplay-icon" title-type="p">
    The macro logs whether each FTP upload was successful or failed.
  </Step>
</Steps>

### **Usage of App**

This macro is designed to work automatically once configured. It is useful when shipping labels need to be generated and exported to an FTP server for external access or downstream fulfilment processing.

<Card title="identifier" horizontal="false" target="_self">
  Defines one or more Linnworks order identifier names used to select which open orders should be processed. Multiple identifiers can be entered as comma-separated values.
</Card>

<Card title="FTPServer" horizontal="false" target="_self">
  Defines the FTP server address where generated shipping label PDFs should be uploaded.
</Card>

<Card title="FTPUserName" horizontal="false" target="_self">
  Defines the FTP username used to authenticate the FTP upload connection.
</Card>

<Card title="FTPPassword" horizontal="false" target="_self">
  Defines the FTP password used to authenticate the FTP upload connection.
</Card>

<Card title="FTPSSL" horizontal="false" target="_self">
  Defines whether the FTP connection should use SSL.
</Card>

<Card title="FTPPort" horizontal="false" target="_self">
  Defines the FTP port used for the upload connection.
</Card>

<Card title="FTPFilePath" horizontal="false" target="_self">
  Defines the destination folder path where shipping label PDFs will be saved.
</Card>

<Card title="PDF File Naming" horizontal="false" target="_self">
  Each uploaded PDF is named using the Linnworks order number, for example **123456.pdf**.
</Card>

### **Key Points to Remember**

- The macro checks open orders from the last 24 hours

- Orders must have one of the configured identifiers to be processed

- Orders are processed only if **LabelPrinted** is false

- Shipping labels are generated using the **Shipping Labels** print template

- PDF files are uploaded to the configured FTP folder

- The uploaded file name uses the Linnworks order number

- FTP success, failure, and errors are recorded in the macro log

Once the macro is running, it provides an automated way to generate and store shipping label PDFs without manual intervention.

### **What You Can Expect**

- **Eligible orders are automatically identified**\
  The macro finds open orders from the last 24 hours that match the configured identifier list

- **Only unprinted labels are processed**\
  Orders where labels have already been printed are skipped

- **Shipping label PDFs are generated**\
  The macro creates PDF files using the configured Linnworks print service template

- **PDF files are uploaded to FTP**\
  Each generated label is uploaded to the configured FTP location

- **Upload results are logged**\
  Successful uploads, failed uploads, and errors are recorded for review

### **Overall Impact**

This macro reduces manual label handling, improves fulfilment speed, and ensures generated shipping labels are available in a central FTP location for operational use.

### What To Do After the Macro Runs

After the macro has completed, review the FTP folder and macro logs to confirm that shipping labels were generated and uploaded successfully.

### **Steps to Follow**

<Steps>
  <Step title="Step 1" title-type="p">
    Open the configured FTP location.
  </Step>

  <Step title="Step 2" title-type="p">
    Confirm that PDF files have been uploaded for the expected order numbers.
  </Step>

  <Step title="Step 3" title-type="p">
    Open one or more PDF files to verify that the shipping labels were generated correctly.
  </Step>

  <Step title="Step 4" title-type="p">
    Review the macro logs for messages such as **Saved In FTP Order Number** or **Error In Save FTP Order Number**.
  </Step>

  <Step title="Step 5" title-type="p">
    If any upload failed, confirm the FTP server, username, password, port, SSL setting, and file path are correct.
  </Step>
</Steps>

### **Why This Matters**

Automating label export helps:

- Reduce manual download and upload work

- Improve warehouse label availability

- Support external fulfilment or courier workflows

- Prevent delays caused by missing label files

- Keep label handling more consistent and traceable

### Best Practices

To get the most value from this macro, ensure identifiers and FTP settings are maintained carefully.

### **Recommended Guidelines**

- **Use clear order identifiers**\
  Apply meaningful identifiers to orders that should have labels generated and uploaded to FTP.

- **Confirm the FTP path exists**\
  Make sure the destination folder configured in **FTPFilePath** is valid and accessible.

- **Use secure FTP settings where required**\
  Enable **FTPSSL** when your FTP server requires secure connections.

- **Schedule the macro regularly**\
  Run the macro at intervals that match your fulfilment workflow, such as every hour or several times per day.

- **Review logs after execution**\
  Check logs for upload success or failure messages to detect FTP issues quickly.

- **Avoid identifier mismatches**\
  The configured identifier values must match the Linnworks identifier names used on orders.

> Correct FTP configuration and accurate order identifiers are essential for reliable automated label export.

### **Example Scenario**

To better understand how this works, here’s a simple example:

Configured values:

- **identifier** = Express,Priority

- **FTPServer** = ftp.example.com

- **FTPPort** = 21

- **FTPFilePath** = /shipping-labels

Orders found in Linnworks:

- **Order A** has identifier **Express** and label not printed → PDF generated and uploaded

- **Order B** has identifier **Priority** and label not printed → PDF generated and uploaded

- **Order C** has identifier **Standard** → skipped

- **Order D** has identifier **Express** but label already printed → skipped

### **What This Means**

- Only orders matching the configured identifiers are processed

- Only orders without printed labels are included

- Uploaded files are saved as order-number PDFs in the configured FTP folder

## **Final Summary**

The *Shipping Label Print to FTP* macro helps automate the process of generating shipping label PDFs and uploading them to a configured FTP location.

By filtering open orders by identifier, skipping orders where labels are already printed, generating label PDFs, and saving them to FTP, this macro reduces manual effort and supports faster, more reliable fulfilment operations.
