{"product_id":"migrate-salesforce-products-to-gohighlevel-custom-objects-via-sheets","title":"Migrate Salesforce Products to GoHighLevel Custom Objects via Sheets","description":"\u003ch3\u003eMigrate Salesforce Products into GoHighLevel Custom Objects—From Google Sheets\u003c\/h3\u003e\n\u003cp\u003eThis n8n workflow reads product rows exported from Salesforce in \u003cstrong\u003eGoogle Sheets\u003c\/strong\u003e, creates matching \u003cstrong\u003eGoHighLevel custom object\u003c\/strong\u003e records via the \u003cstrong\u003eLeadConnector API\u003c\/strong\u003e, and then writes back success\/error status to the sheet—so your migration stays trackable and safe.\u003c\/p\u003e\n\n\u003ch3\u003eWhat this workflow does\u003c\/h3\u003e\n\u003cul\u003e\n  \u003cli\u003e\n\u003cstrong\u003eManual trigger:\u003c\/strong\u003e Runs when you execute the workflow manually.\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003eReads Salesforce export rows:\u003c\/strong\u003e Pulls product rows from a Google Sheets tab where the \u003cem\u003eCreated\u003c\/em\u003e column is set to \u003cstrong\u003eNo\u003c\/strong\u003e, and processes only up to a configurable \u003cstrong\u003ebatch size\u003c\/strong\u003e.\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003eCreates GoHighLevel records:\u003c\/strong\u003e For each product row, sends a \u003cstrong\u003ePOST\u003c\/strong\u003e request using n8n’s \u003cstrong\u003eHTTP Request\u003c\/strong\u003e node to create a record in \u003cstrong\u003ecustom_objects.products_1\u003c\/strong\u003e, mapping product properties from the sheet.\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003eUpdates the source sheet:\u003c\/strong\u003e On success, updates the same Google Sheets row to mark it as created and stores the returned \u003cstrong\u003eGoHighLevel record ID\u003c\/strong\u003e.\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003eContinues on errors:\u003c\/strong\u003e If GoHighLevel returns an error, flags the row as \u003cstrong\u003eerror\u003c\/strong\u003e in Google Sheets and continues processing the next product.\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003eSlack alert on failure:\u003c\/strong\u003e If the workflow fails due to any node-level issue, it posts an error alert to a specified \u003cstrong\u003eSlack\u003c\/strong\u003e channel.\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003ch3\u003eUse cases\u003c\/h3\u003e\n\u003cul\u003e\n  \u003cli\u003eMove \u003cstrong\u003eSalesforce product catalogs\u003c\/strong\u003e into GoHighLevel custom objects after an export.\u003c\/li\u003e\n  \u003cli\u003eRun \u003cstrong\u003erepeatable batch migrations\u003c\/strong\u003e (controlled by batch size) without reprocessing already-created rows.\u003c\/li\u003e\n  \u003cli\u003eOperationally monitor integration health with \u003cstrong\u003eSlack failure alerts\u003c\/strong\u003e and per-row status written back to Google Sheets.\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003ch3\u003eTechnical details\u003c\/h3\u003e\n\u003cul\u003e\n  \u003cli\u003e\n\u003cstrong\u003eNodes \/ integrations:\u003c\/strong\u003e \u003cem\u003eLimit\u003c\/em\u003e, \u003cem\u003eSlack\u003c\/em\u003e, \u003cem\u003eSticky Note\u003c\/em\u003e, \u003cem\u003eHTTP Request\u003c\/em\u003e, \u003cem\u003eError Trigger\u003c\/em\u003e, \u003cem\u003eGoogle Sheets\u003c\/em\u003e.\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003eAuth \u0026amp; endpoints:\u003c\/strong\u003e Use a GoHighLevel (LeadConnector) \u003cstrong\u003eprivate integration token\u003c\/strong\u003e via environment variables like \u003cstrong\u003eYOUR_GHL_API_TOKEN\u003c\/strong\u003e and set \u003cstrong\u003eYOUR_GHL_LOCATION_ID\u003c\/strong\u003e in the HTTP request configuration.\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003eSchema requirement:\u003c\/strong\u003e Ensure GoHighLevel has a custom object schema named \u003cstrong\u003ecustom_objects.products_1\u003c\/strong\u003e with fields matching the properties sent in the API request.\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003eSheet syncing:\u003c\/strong\u003e Configure Google Sheets OAuth2 credentials, including \u003cstrong\u003eYOUR_GOOGLE_SHEET_ID_2\u003c\/strong\u003e and the target sheet tab used to read\/update migration status.\u003c\/li\u003e\n\u003c\/ul\u003e","brand":"N8N Commerce","offers":[{"title":"Default Title","offer_id":45962071670963,"sku":"N8N-19201","price":69.99,"currency_code":"GBP","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0749\/6279\/6723\/files\/WVTpmtb7WmCxVh5T_qyfZ_sD5OF38T.png?v=1788599756","url":"https:\/\/buyflowscripts.com\/products\/migrate-salesforce-products-to-gohighlevel-custom-objects-via-sheets","provider":"N8N Commerce","version":"1.0","type":"link"}