Social CSV Import Setup
Bulk-import social media posts from CSV files. Upload a CSV, check import status, and assign imported posts to connected accounts. This quick-start walks you through the full import workflow from file upload to account assignment.
Prerequisites
Before making your first Social CSV Import call, confirm you have:
- A GoHighLevel sub-account with at least one connected social media account
- Access to Settings > Integrations > Private Integrations in your sub-account
- A REST client such as Postman, Insomnia, or
curlin your terminal - Your sub-account’s
locationId(found in Settings > Business Profile) - A properly formatted CSV file with columns for post content, schedule date, and platform
Your CSV should include headers like post, scheduleDate, platform, and mediaUrl. Each row represents one social post. Use ISO 8601 format for dates (e.g., 2026-03-15T10:00:00Z).
Set Up Authentication
All Social CSV Import endpoints require a Private Integration Token (PIT) with the social-media-posting scope.
Navigate to Settings > Integrations > Private Integrations. Click Create New Integration, name it “CSV Import API,” and enable the social-media-posting scope. Click Save and copy the generated token.
Pass this token in the Authorization header as a Bearer token. Set your base URL to https://services.leadconnectorhq.com. For the upload endpoint, use Content-Type: multipart/form-data instead of JSON.
Make Your First Call
The CSV import is a three-step process. Start by uploading the CSV file:
POST /social-media-posting/csv
Authorization: Bearer {your-pit-token}
Content-Type: multipart/form-data
locationId: your-location-id
file: @social-posts.csv
The response returns a csvImportId. Use this ID to check import status:
GET /social-media-posting/csv/{csvImportId}
Authorization: Bearer {your-pit-token}
Once the import is processed, assign accounts to the imported posts:
POST /social-media-posting/csv/{csvImportId}/accounts
Authorization: Bearer {your-pit-token}
Content-Type: application/json
{
"accountIds": ["connected-account-id-1", "connected-account-id-2"]
}
This links your imported posts to the social accounts they should publish through.
Handle the Response
The upload response returns a 200 status with import details:
{
"csvImportId": "import-456",
"status": "processing",
"totalRows": 25,
"processedRows": 0,
"errors": []
}
Poll GET /social-media-posting/csv/{csvImportId} until status changes to "completed". Check processedRows against totalRows to confirm all rows were imported. The errors array lists any rows that failed with the row number and reason.
Common issues: rows with missing required fields are skipped, invalid date formats cause parsing errors, and media URLs that return 404 are flagged but do not block the import. A 400 response on upload typically means the CSV format is invalid or exceeds the size limit.
Test Your Setup
Run through this checklist to confirm everything works:
- Create a small test CSV with 3-5 rows of post content
- Upload the CSV with
POST /social-media-posting/csvand save thecsvImportId - Poll status with
GET /social-media-posting/csv/{csvImportId}until processing completes - Assign accounts with
POST /social-media-posting/csv/{csvImportId}/accounts - Verify the imported posts appear in Marketing > Social Planner in GHL
If rows fail to import, check the errors array for specific row numbers and fix your CSV accordingly. Re-upload with corrected data.
Next Steps
Read the full Social CSV Import Guide for CSV formatting best practices, large file handling, and automation patterns. From here, explore Social Post CRUD for managing individual posts and Social Accounts for managing connected platforms.