If you need to download all files from GoHighLevel contacts, for a backup, a client offboarding or a lender submission, you'll find there's no bulk button for it. Files are spread across custom fields, conversations, form submissions and documents, and each one comes out a different way. This guide shows where files live, how to get them out natively, and how to keep every file tied to the contact it belongs to.
Where files live on a contact
A single contact can have files in several places:
| Location | Typical contents |
|---|---|
| File upload custom fields | Bank statements, IDs, applications, photos |
| Opportunity file fields | Deal-specific documents |
| Conversation attachments | MMS images, email attachments sent by the contact |
| Call recordings | Audio of recorded calls |
| Form and survey uploads | Files submitted through a funnel or website form |
| Documents and contracts | Proposals, agreements and their signed copies |
The sub-account's media library is a separate place, used mostly for marketing assets rather than contact files. See GoHighLevel media library links for that.
Method 1: Download from the contact record
For one contact, this is straightforward:
- Open the contact.
- Find the file upload fields in the contact's details panel. Click a file to open or download it.
- Open the conversation to find attachments. Click each one to save it.
- Recorded calls show a player with a download option.
- Signed documents appear in the documents and contracts area, where each one can be downloaded.
Save everything into a folder named with the contact's name and contact ID. That ID is what lets you match files back to a CSV later.
For ten contacts, this is an hour. For two thousand, it isn't an option.
Method 2: Form submissions
If most files came in through a form, the submissions view can be faster than opening contacts:
- Open the form in the sub-account's sites or forms area.
- Go to its submissions.
- Open each submission and download the uploaded files.
It's still one submission at a time, and it only covers files uploaded through that form.
Method 3: The media library ZIP
As of October 2026, HighLevel's Media Storage can download a folder as a ZIP that keeps its structure. That's useful for marketing assets, but files attached to contacts through upload fields or conversations aren't organized into media folders by contact, so this rarely solves the contact-files problem.
Method 4: Download all files from GoHighLevel contacts with the API
For a full pull, you need the API. The general approach:
- List contacts. Page through the Contacts API for the sub-account.
- Read file fields. Each contact's custom field values include its file upload fields. Map field IDs to names using the custom fields endpoint, so you know which file is the "Bank Statement 1" and which is the "Driver's License."
- Collect conversation attachments. Use the Conversations API to list messages and read attachment URLs.
- Fetch recordings. Call recordings come from a separate endpoint, one call message at a time.
- Download and store. Save each file under a path like
contact-id/field-name/original-filename. - Write a manifest. One row per file: contact ID, contact name, source (field, conversation, form, recording), field name, original URL, saved path, and whether the download worked.
Plan for:
- Rate limits. HighLevel documents 100 requests per 10 seconds and 200,000 per day, per app per sub-account, as of October 2026.
- Dead links. Some older attachments, especially carrier-hosted MMS images, stop working at the source. Log them rather than failing the whole run.
- Duplicate filenames. Many files are named
image.jpgordocument.pdf. Never save by filename alone. - Resuming. A large sub-account can have tens of thousands of files. The job will get interrupted, so it needs to pick up where it stopped.
If you're new to API access, start with the Private Integration Token guide.
Keep the manifest, not just the files
A folder of 40,000 files is not a backup if nobody can tell whose they are. The manifest is what makes the download useful:
- It lets you hand a client "all of Jane Smith's documents" in seconds.
- It joins to your contact CSV on contact ID.
- It shows which files couldn't be retrieved, so nobody assumes they're there.
- It lets you compare counts against the live account.
Before you download: a few checks
- Permissions. Contact files often contain sensitive personal and financial data. Only pull them if you have a reason and a secure place to store them.
- Storage. Know where the files will live, who can access them, and how long you'll keep them.
- Client agreement. For offboarding, confirm which files the client expects and in what format.
Where the native way gets slow
Every native method is per contact or per submission. The API route works, but it's a real project: mapping fields, collecting from six sources, handling rate limits and dead links, resuming interrupted runs, and writing the manifest. Then you repeat it next month for every sub-account.
How Backup & Insights handles it
Backup & Insights from RGS Tools does the full pull for every connected sub-account.
- File backup copies contact and opportunity file fields, conversation attachments, call recordings, form and survey uploads, the media library and signed documents. Each file is tied to its contact, opportunity, conversation or submission in a manifest that lines up with your CSVs. Backups run monthly and incrementally, resume on their own and respect HighLevel's API limits. Files already gone at the source are marked "gone at source."
- Zip downloads and share links let you download backups as zip parts or send someone a link that expires.
- Document analytics shows documents per contact and uploads per month, so you can spot contacts with missing documents.
Backup & Insights is $99/mo per agency with unlimited sub-accounts and a 7-day free trial. For the rest of the account, see how to back up a GoHighLevel sub-account.
Questions
Can I bulk download contact files in GoHighLevel?
Not natively, as of October 2026. You can download files one at a time from the contact record, and the media library can download folders as a ZIP, but there's no bulk download for files attached to contacts.
Are file upload fields included in the GoHighLevel contact export?
The CSV export does not include the files themselves. To keep the documents, download them separately and keep a record of which contact each one belongs to.
Where do form upload files go in GoHighLevel?
Files uploaded through a form or survey are stored with the submission and, when mapped to a file upload custom field, appear on the contact record. You can view submissions in the form's submissions area.