You want to stop doing FTP transfers manually. Files should move — from your Mac to a server, or from a server to your Mac — automatically, without you initiating each transfer. There are several ways to achieve this on macOS. Some are free. Some require technical knowledge. Some just work.
This is an honest comparison of every real option available in 2026. We'll cover what each approach does well, where it falls short, and who should use it.
Option 1: Shell scripts (lftp/curl + cron or launchd)
Shell scripts with cron or launchd
Use lftp or curl to handle FTP operations in a shell script, then schedule it to run automatically via cron (simpler) or launchd (more reliable, macOS-native).
A basic mirror command using lftp looks like this:
#!/bin/bash
# Sync remote FTP folder to local — runs via cron every 5 min
lftp -u "$FTP_USER","$FTP_PASS" sftp://ftp.example.com << EOF
mirror --only-newer /remote/incoming/ /Users/you/Downloads/incoming/
quit
EOF
Pros: free, no dependencies beyond lftp, highly flexible — you can chain other shell commands, send emails, trigger scripts on download. Works headlessly on a server. Full control over behavior.
Cons: requires Terminal knowledge and comfort with shell scripting and cron syntax. Fails silently — a credential change, a server move, or a network quirk produces an error in a log file nobody is reading. No macOS notifications. No conflict resolution logic unless you write it. Storing credentials securely in shell scripts requires extra effort (environment variables, macOS Keychain via security command). Apple's recommendation for scheduled tasks shifted from cron to launchd years ago — setting up launchd plists correctly is more involved.
Best for: developers who prefer code, server-side automation, or situations where the Mac is a server running headlessly and a GUI makes no sense.
Option 2: Automator and Folder Actions
Automator / Folder Actions
macOS includes Automator, a visual workflow builder, and Folder Actions — triggers that fire when files are added to a local folder. At first glance, this sounds ideal for FTP automation.
In practice, Automator has no built-in FTP actions. Any FTP automation via Automator requires a "Run Shell Script" action — meaning you're back to writing shell scripts, just wrapped in a GUI that adds complexity without adding capability.
Pros: already installed on every Mac, no additional software needed, visual interface.
Cons: no native FTP support — you end up writing shell scripts inside Automator anyway. Automator workflows are fragile and don't handle errors gracefully. Apple has been de-emphasizing Automator for years (Shortcuts is the replacement, but Shortcuts also has no FTP support). Folder Actions only trigger on local folder changes — they don't watch remote FTP folders. Not suitable for monitoring a server-side folder.
Best for: simple local file manipulation tasks on your Mac. Not suitable for FTP automation in any meaningful sense.
Option 3: General-purpose sync tools
General sync tools
Some sync tools on the market support FTP as one of many backends, alongside cloud storage, NAS devices, and local folders. They're designed around the concept of bidirectional synchronization jobs.
Pros: can handle many storage types in one tool, bidirectional sync, conflict resolution.
Cons: built for general sync, not lightweight FTP automation. The interface is designed around synchronization jobs, not event-driven monitoring. Polling-based for remote folders — not instant. Heavier resource usage. The UI complexity reflects their broad scope, which is overkill for a simple "watch this FTP folder and download new files" workflow.
Option 4: A dedicated Mac app (FTPull + FTPush)
FTPull + FTPush — purpose-built for Mac FTP automation
FTPull and FTPush are two separate Mac apps, each doing one thing: FTPull monitors a remote FTP folder and downloads new files automatically. FTPush monitors a local folder and uploads new files automatically.
Both are built specifically for macOS — not ports of cross-platform tools. They use native macOS APIs throughout:
- FSEvents for instant local file detection (FTPush) — sub-second detection when a file lands in the watched folder
- macOS Notification Center for alerts when transfers complete or fail
- Finder tags to visually mark files by status (pending, uploading, done, error) — visible directly in Finder without opening the app
- macOS Keychain for credential storage — no passwords in config files or plain text
- Menu bar integration — both apps live in the menu bar and use near-zero CPU when idle
Key features that distinguish them from the alternatives:
- FTPull: configurable polling interval per connection (down to 1 minute), extension filters, scheduling, recursive subdirectory monitoring, transfer history, multiple simultaneous connections
- FTPush: FSEvents-based (instant detection, not polling), file stability checker (waits for file to stop growing before uploading), concurrent uploads, post-upload actions (move to archive, delete local, run script), bandwidth limits
- Both: FTP, SFTP, and FTPS support; macOS sandbox with security-scoped bookmarks; 14-day free trial
How they compare
| Approach | Setup difficulty | Notifications | Mac-native UI | FTP/SFTP/FTPS | Maintenance |
|---|---|---|---|---|---|
| Shell scripts + cron | High | None | No | Yes (lftp) | High |
| Automator | Medium | Basic | Partial | No (scripts only) | Medium |
| General sync tools | Medium | Yes | Partial | Yes | Low |
| FTPull + FTPush | Low | Yes (rich) | Yes (native) | Yes (native) | None |
The right tool for the job
What matters for FTP automation on Mac
- Instant detection: FSEvents-based monitoring means FTPush detects a new file in under a second — not after the next polling interval
- Zero maintenance: no scripts to update, no cron jobs to fix, no configuration files to edit
- Native feedback: macOS notifications, Finder tags, and a real-time log — not a text file you have to open manually
- It just runs: configure once, it stays active in the menu bar indefinitely
FTPull and FTPush focus on one workflow — automatic FTP/SFTP/FTPS transfers on Mac — and do it without compromise. No synchronization logic to configure, no cloud storage backends, no cross-platform UX. Just: watch this folder, transfer new files, tell me when done.