Hi, @Nivedraj P,
For this volume, I would first validate one important limit: a single contact list has a maximum of 1 million contacts. So, for 1.5 million records, the design would likely need more than one contact list.
For the API approach, POST /api/v2/outbound/contactlists/{contactListId}/contacts is useful when you need the Genesys Contact ID returned immediately, because you can store the mapping between your Lead ID and the generated Genesys Contact ID at the time of insert. But for 1.5 million contacts, I would be careful with processing time, rate limits, retry logic, and API response time. I would not assume a fixed processing time per request without doing a volume test in the customer org.
For bulk monthly uploads, I would lean toward CSV import if the contacts are already available as a file. You can include the customer Lead ID as a custom column, and I would also configure it as the unique identifier column if it will be used for future updates/appends.
After the import completes, you can export the contact list records. The exported CSV includes both the custom uploaded columns and Genesys system-generated columns, including inin-outbound-id, which is the internally generated contact ID. That means you can use the exported file to map:
Lead ID → inin-outbound-id
So the recommended design could be:
-
Upload/import the CSV with Lead ID as a custom column.
-
Use Lead ID as the unique identifier column, if applicable.
-
After import completion, export the contact list.
-
Read the exported CSV and store the mapping between Lead ID and inin-outbound-id.
If the client needs the Genesys Contact ID immediately during the insert process, then the API batch approach is better. If the mapping can be built after the import finishes, CSV import + export is usually cleaner for this volume.
------------------------------
Arthur Pereira Reinoldes
------------------------------