How to Download All Files from GoHighLevel Contacts

Where files live on GoHighLevel contacts, how to download them one by one or via the API, and how to keep each file tied to its contact in a bulk pull.

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:

  1. Open the contact.
  2. Find the file upload fields in the contact's details panel. Click a file to open or download it.
  3. Open the conversation to find attachments. Click each one to save it.
  4. Recorded calls show a player with a download option.
  5. 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:

  1. Open the form in the sub-account's sites or forms area.
  2. Go to its submissions.
  3. 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:

  1. List contacts. Page through the Contacts API for the sub-account.
  2. 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."
  3. Collect conversation attachments. Use the Conversations API to list messages and read attachment URLs.
  4. Fetch recordings. Call recordings come from a separate endpoint, one call message at a time.
  5. Download and store. Save each file under a path like contact-id/field-name/original-filename.
  6. 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:

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:

Before you download: a few checks

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.

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.

Features in this guide

File Backup

Copies contact files, attachments, call recordings, form uploads, media and signed documents to your own storage, monthly.

Document Analytics

Documents per contact, contacts by document field, tag and state, and uploads per month.

Zip Downloads and Share Links

Download backups as zip parts, or send someone a link that expires.

Keep reading

Backup & Insights

How to Back Up a GoHighLevel Sub-Account

A layer-by-layer plan to back up a GoHighLevel sub-account: snapshots for setup, CSVs for records, and the files, recordings and messages native exports skip.

5 min read
Backup & Insights

What the GoHighLevel CSV Export Leaves Out

The GoHighLevel CSV export skips files, message history, older notes and hidden columns. See what's missing, why it matters, and how to get each piece out.

5 min read
Backup & Insights

GoHighLevel Client Offboarding Checklist: Export Before Deleting

A step-by-step GoHighLevel client offboarding checklist: what to export, what snapshots miss, and how to keep a copy before the sub-account is deleted.

6 min read
All 6 tools, all 34 features: $149/month

Every tool above plus everything we release next. $302/month bought separately. 7 days free, cancel any time.

Start the bundle free