Documentation Index

Fetch the complete documentation index at: https://help.dialpad.com/llms.txt

Use this file to discover all available pages before exploring further.

Field mapping for Dialpad Call Activity in Salesforce

Prev Next

Customized reports require customized data. Use Dialpad Call Log Custom Object to discover trends and examine the details of your calls. 

Every Dialpad call eligible to be logged in a connected Salesforce instance creates a Dialpad Call Log record in Salesforce.

Who can use this

Dialpad Sell, Dialpad Support, and Dialpad Connect users with Pro and Enterprise plans can use this feature.

Before you can use a Dialpad Call Log Custom Object, you must contact our Customer Care Team to enable the feature.

To configure field mapping for Dialpad call activities, you must install the latest version of the Dialpad for Salesforce package in Salesforce.

Let's dive into the details. 

Dialpad Call Log Custom Object 

The Dialpad Call Log is a Custom Object in the Dialpad managed package that captures Dialpad call details and notes them in Salesforce. 

Using the chosen Dialpad call information, this Custom Object creates a Call Activity Record (Task Activity) in Salesforce.

SF_confingure.png

Use Dialpad Call Log objects to create call reports and dashboards in Salesforce and measure KPIs specific to your contact centers and agents.

The Dialpad Custom Call Log Object is managed in your Salesforce Object Manager.

Available fields

Dialpad offers a wide variety of fields that can be mapped in Salesforce.

Find our available fields and their definitions listed below.

Note

You can delete the Call Disposition Notes field, as it is no longer in use and won’t be populated.

Fields

  • Agent Name: The call operator's display name.

  • AI Summary: AI Recap of the call.

  • AI Action Items: The Action Items detected in a call.

  • AI Call Purpose: AI Call Purpose, accessible in the AI Recap object.

  • AI CSAT: The AI CSAT score.

  • AI Outcome: The outcome of the call, generated along with the AI Recap.

  • AI Playbook adherence: Numeric value that explains how much a rep adhered to the AI Playbook.

  • Account Timezone: The Timezone of the account.

  • Call Duration(In Seconds): Total duration of the call, in seconds.

  • Call End Time: The call's end date.

  • Call From: The phone number that was used to dial the call.

  • Call Quality Rating: The MOS call quality score provided by the user.

  • Call Recording URL: The call recording's shareable URL.

  • Call Result: The call disposition value.

  • Call Start Time: The time when the call started.

  • Call To (First): The number that was dialed.

  • Call To: The number of the final recipient after any transfers or routing.

  • Call Type: The call direction (inbound, outbound etc).

  • CallId: Unique call ID

  • Call Status: The current state or outcome of the call (it is a picklist field).

  • Comments: Notes written by the agent during the call.

  • Connected Duration: The length of time the call was connected to an operator.

  • Contact Timezone: The timezone of the contact.

  • CSAT Score: The CSAT score.

  • Dialing Duration: The length of time spent dialing before the call was answered.

  • Dialpad Agents: Dialpad Agents who participated in the call.

  • Dialpad Call Center: The Dialpad Contact Center that handled the call.

  • Due Date: Call activity date (the day the call occured).

  • Hold Duration: The amount of time the caller was on hold.

  • IsDialpadCallLog: Confirms the object is a Dialpad Call Log (this will always be true).

  • isCreatedFromDialpad: Confirms if the call was created from Dialpad.

  • isValidatedCall: Confirms if the call was connected between two parties where both spoke for longer than 1 minute (ie a valid conversation).

  • Lead Timezone: Timezone of the lead.

  • Notes: A Long Text Area to log notes.

  • Object Name: Name of the Dialpad contact.

  • Opportunity Timezone: Timezone of the Opportunity.

  • Parent Object Id: ID of the connected Salesforce instance.

  • PhoneNumber: Dialpad target number.

  • Powerdialer Assigned List: The name of the Powerdialer List that the number is assigned to.

  • Powerdialer Dialed List: The name of the Powerdialer List that the call was dialed from.

  • Queued Duration: Amount of time the caller spent in a queue.

  • Related Object Ids: The Salesforce ID of the related object (if selected).

  • Ringing Duration: The time spent in a ringing state (before the call was answered).

  • Routing Duration: The time spent in transit (routing) before being answered.

  • Status: The status of the Salesforce task (this will always be listed as Complete).

  • Subject: The subject listed by the agent. If no status was provided, the default status will be listed.

  • Target Name: The name of the call's target.

  • Task Subtype: The value 'Call' will be updated for every log.

  • Time of call: The call's start date.

  • Total Number of Times Dialed: The total number of times the number was dialed.

  • Type:  The value 'Call' will be updated for every log.

Configuring field mapping

Salesforce Admins can map fields from the Dialpad call log object to a Task object, ensuring that the call information captured makes the most sense for your organization.

Let's take a look at how to configure field mapping.

  1. Go to your Dialpad Lightning tab

  2. Select Setup Manager

  3. Select Settings

  4. Expand Call Activity Field Mapping
    Screen_Shot_2022-05-18_at_6.05.42_AM.png

  5. Select the desired Task fields

  6. Select Save

Once you've saved your preferences, all proceeding calls will capture the call information detailed in your selected Task fields.

Dialpad SMS Log Custom Object

The Dialpad SMS Log is a Custom Object in the Dialpad managed package that captures Dialpad SMS details and notes them in Salesforce. 

Using the chosen Dialpad SMS information, this Custom Object creates a Dialpad SMS Log in Salesforce.

This object is created only when ‘Log SMS messages as activities’ setting is checked.

Available fields

Dialpad offers a wide variety of fields that can be mapped in Salesforce.

Find our available fields and their definitions listed below.

Fields

  • Activity Date

  • Agent Name

  • Department

  • Group Id

  • Media

  • Message Details

  • Message Status

  • Message Subtype

  • Message Direction

  • Object Name

  • Parent Object Id

  • RelatedObjectIds

  • Subject

  • Type

  • Media File

  • Salesforce Task

Configuring field mapping

Salesforce Admins can map fields from the Dialpad SMS Log Custom Object to a Task object, ensuring that the  SMS information captured makes the most sense for your organization.

Let's take a look at how to configure field mapping.

  1. Go to your Dialpad Lightning tab

  2. Select Setup Manager

  3. Select Settings

  4. Expand SMS Activity Field Mapping

  5. Select the desired Task fields

  6. Select Save

Once you've saved your preferences, all proceeding SMS messages will capture the SMS information detailed in your selected Task fields.

Sample reports

Use sample reports to get an idea of what can be exported. 

Access your sample reports from your Dialpad Dashboards. 

Screen_Shot_2022-05-19_at_7.41.13_AM.png

Remember, these reports are built on top of the Dialpad Call Log object, so you will only see data if you start using the newly released updates.

Field data types

Let's go over the data types for our most used fields. 

Account fields

Field Name

Data Type

Account Timezone

Text (255 characters)

IsCreatedFromDialpad

Checkbox

Powerdialer Assigned List

Long Text Area (1000 characters)

Powerdialer Dialed List

Long Text Area (1000 characters)

Powerdialer Last Dialed via 

Lookup (Dialpad LOAC)

Total Number of Times Dialed 

Number (18, 0)

Contact fields

Field Name

Data Type

Contact Timezone

Text (255 characters)

IsCreatedFromDialpad

Checkbox

Powerdialer Assigned List

Long Text Area (1000 characters)

Powerdialer Dialed List

Long Text Area (1000 characters)

Powerdialer Last Dialed via 

Lookup (Dialpad LOAC)

Total Number of Times Dialed 

Number (18, 0)

Lead fields

Field Name

Data Type

Lead Timezone

Text (255 characters)

IsCreatedFromDialpad

Checkbox

Powerdialer Assigned List

Long Text Area (1000 characters)

Powerdialer Dialed List

Long Text Area (1000 characters)

Powerdialer Last Dialed via 

Lookup (Dialpad LOAC)

Total Number of Times Dialed 

Number (18, 0)

Opportunity fields

Field Name

Data Type

Opportunity Timezone

Text (255 characters)

IsCreatedFromDialpad

Checkbox

Powerdialer Assigned List

Long Text Area (1000 characters)

Powerdialer Dialed List

Long Text Area (1000 characters)

Powerdialer Last Dialed via 

Lookup (Dialpad LOAC)

Total Number of Times Dialed 

Number (18, 0)

Task and Activity fields

Field Name

Data Type

Call End Time 

Date/Time

Call Recording URL 

Text (255 characters)

Call Start Time

Date/Time

CallId

Text (32 characters)

Dialpad Agent 

Lookup (Dialpad Agents)

Dialpad Call Center

Lookup (Dialpad Call Center)

Dialpad List

Lookup (Dialpad List)

IsDialpadCallLog

Checkbox 

PhoneNumber

Text (50 characters)

AI Call Purpose

Long Text (1000 characters)

AI CSAT

Number (1-100)

AI Outcome

Long Text (1000 characters)

AI Playbook Adherence

Percentage

Notes

To see the Dialpad AI fields (except for AI Summary and AI Action Items), you'll need to configure them in your field mapping. Once mapped, you'll see these fields noted on the call task.

Due to Task formatting restrictions, AI Summary and AI Action Items cannot be displayed in a Task.

Call Tasks are created in Salesforce, not Dialpad. As Dialpad does not store these records, we cannot backfill previous calls.

Call log fields

Field Name

Data Type

Lead Timezone

Text (255 characters)

IsCreatedFromDialpad

Checkbox

Powerdialer Assigned List

Long Text Area (1000 characters)

Powerdialer Dialed List

Long Text Area (1000 characters)

Powerdialer Last Dialed via 

Lookup (Dialpad LOAC)

Total Number of Times Dialed 

Number (18, 0)

AI Action Item

Rich Text (132, 072)

AI Call Purpose

Long Text (1000 characters)

AI CSAT

Number (1 - 100)

AI Outcome

Long Text (1000 characters)

AI Playbook Adherence

Percentage

AI Summary 

Rich Text (132, 072)

Note

The 6 Dialpad AI Call Log fields became available to all users on March 15, 2024.
If you started using Dialpad for Salesforce after March 15, 2024, you will see a new section called Dialpad AI on the page layout.

If you started using Dialpad for Salesforce before March 15, 2024, you'll need to create a new section and add the AI fields manually.
From your Salesforce Lightening App Builder, search for Dialpad AI. Select Dialpad AI, drag and drop it into the desired position, then select Save.

Using Timezones

When using Timezones, you must select a specific timezone.

As of August 2, 2026, Dialpad offers the following timezone options:

  • GMT-12:00 - Baker Island, Howland Island (AoE)

  • GMT-11:00 - American Samoa, Niue (SST)

  • GMT-10:00 - Hawaii, Tahiti, Cook Islands (HST)

  • GMT-09:30 - Marquesas Islands (MART)

  • GMT-09:00 - Alaska, Gambier Islands (AKST)

  • GMT-08:00 - Los Angeles, Vancouver, Tijuana (PST)

  • GMT-07:00 - Denver, Phoenix, Calgary (MST)

  • GMT-06:00 - Chicago, Mexico City, Costa Rica, Galapagos (CST)

  • GMT-05:00 - New York, Toronto, Lima, Bogota (EST)

  • GMT-04:00 - Halifax, Santiago, Caracas, La Paz (AST)

  • GMT-03:30 - St. John’s (NST)

  • GMT-03:00 - São Paulo, Buenos Aires, Montevideo (BRT)

  • GMT-02:00 - Fernando de Noronha, South Georgia (FNT)

  • GMT-01:00 - Cape Verde, Azores (CVT)

  • GMT+00:00 - London, Dublin, Lisbon, Reykjavik, Accra (GMT)

  • GMT+01:00 - Paris, Berlin, Rome, Lagos, Kinshasa (CET)

  • GMT+02:00 - Cairo, Johannesburg, Helsinki, Kyiv, Jerusalem (EET)

  • GMT+03:00 - Moscow, Nairobi, Baghdad, Riyadh, Istanbul (MSK)

  • GMT+03:30 - Tehran (IRST)

  • GMT+04:00 - Dubai, Baku, Tbilisi, Mauritius (GST)

  • GMT+04:30 - Kabul (AFT)

  • GMT+05:00 - Karachi, Islamabad, Tashkent, Yekaterinburg (PKT)

  • GMT+05:30 - New Delhi, Mumbai, Colombo (IST)

  • GMT+05:45 - Kathmandu (NPT)

  • GMT+06:00 - Dhaka, Almaty, Thimphu (BST)

  • GMT+06:30 - Yangon, Cocos Islands (MMT)

  • GMT+07:00 - Bangkok, Jakarta, Hanoi, Ho Chi Minh City (ICT)

  • GMT+08:00 - Beijing, Singapore, Hong Kong, Perth, Taipei (CST)

  • GMT+08:45 - Eucla (ACWST)

  • GMT+09:00 - Tokyo, Seoul, Pyongyang (JST)

  • GMT+09:30 - Adelaide, Darwin (ACST)

  • GMT+10:00 - Sydney, Brisbane, Guam, Port Moresby (AEST)

  • GMT+10:30 - Lord Howe Island (LHST)

  • GMT+11:00 - Solomon Islands, Vanuatu, Magadan (SBT)

  • GMT+12:00 - Auckland, Fiji, Kamchatka (NZST)

  • GMT+12:45 - Chatham Islands (CHAST)

  • GMT+13:00 - Phoenix Islands, Tokelau, Tonga, Samoa (PHOT)

  • GMT+14:00 - Kiritimati/Line Islands (LINT)

Important

If you were using timezones before August 2nd, 2026, you must run the script below to migrate the old timezone format to the new one.

Salesforce - Timezone update script

This script maps the old timezone value, which was a text field, to the new picklist field.

The script must be executed in the Salesforce Developer Console or Workbench. Due to Salesforce's character limit in the Developer Console, we have divided the script into two parts, with each part processing a subset of timezones.

In the script, we have provided the 2 variable sObjectName and recordLimit

  • sObjectName: Updates the variable to object name, where they have to map the old timezone value to the new value

  • recordLimit : Limits the number of records that can be processed in a transaction.

When retrieving records for processing, we must ensure that the Dialpad__Timezon__c  field is not empty (NULL), and the Dialpad__Dialpad_Timezone__c field is empty (NULL).

// ============================================================
// PART 1 of 2
// Run Part 1 first, then run Part 2.
// ============================================================
String sObjectName = 'Account';                        // e.g. 'Account', 'Contact', 'Lead'
Integer recordLimit = 200;                             // Max limit 10000, Update as per org configuration 
String sourceField = 'Dialpad__Timezone__c';           // Old Text Field API
String targetField = 'Dialpad__Dialpad_Timezone__c';   // New Picklist Field API 
Map<String, String> tzMap = new Map<String, String>{
'Pacific/Midway' => 'GMT-11:00 - American Samoa, Niue (SST)',
'Pacific/Niue' => 'GMT-11:00 - American Samoa, Niue (SST)',
'Pacific/Pago_Pago' => 'GMT-11:00 - American Samoa, Niue (SST)',
'America/Adak' => 'GMT-10:00 - Hawaii, Tahiti, Cook Islands (HST)',
'Pacific/Honolulu' => 'GMT-10:00 - Hawaii, Tahiti, Cook Islands (HST)',
'Pacific/Johnston' => 'GMT-10:00 - Hawaii, Tahiti, Cook Islands (HST)',
'Pacific/Rarotonga' => 'GMT-10:00 - Hawaii, Tahiti, Cook Islands (HST)',
'Pacific/Tahiti' => 'GMT-10:00 - Hawaii, Tahiti, Cook Islands (HST)',
'Pacific/Marquesas' => 'GMT-09:30 - Marquesas Islands (MART)',
'America/Anchorage' => 'GMT-09:00 - Alaska, Gambier Islands (AKST)',
'America/Juneau' => 'GMT-09:00 - Alaska, Gambier Islands (AKST)',
'America/Metlakatla' => 'GMT-09:00 - Alaska, Gambier Islands (AKST)',
'America/Nome' => 'GMT-09:00 - Alaska, Gambier Islands (AKST)',
'America/Sitka' => 'GMT-09:00 - Alaska, Gambier Islands (AKST)',
'America/Yakutat' => 'GMT-09:00 - Alaska, Gambier Islands (AKST)',
'Pacific/Gambier' => 'GMT-09:00 - Alaska, Gambier Islands (AKST)',
'America/Los_Angeles' => 'GMT-08:00 - Los Angeles, Vancouver, Tijuana (PST)',
'America/Santa_Isabel' => 'GMT-08:00 - Los Angeles, Vancouver, Tijuana (PST)',
'America/Tijuana' => 'GMT-08:00 - Los Angeles, Vancouver, Tijuana (PST)',
'America/Vancouver' => 'GMT-08:00 - Los Angeles, Vancouver, Tijuana (PST)',
'Pacific/Pitcairn' => 'GMT-08:00 - Los Angeles, Vancouver, Tijuana (PST)',
'America/Boise' => 'GMT-07:00 - Denver, Phoenix, Calgary (MST)',
'America/Cambridge_Bay' => 'GMT-07:00 - Denver, Phoenix, Calgary (MST)',
'America/Creston' => 'GMT-07:00 - Denver, Phoenix, Calgary (MST)',
'America/Dawson' => 'GMT-07:00 - Denver, Phoenix, Calgary (MST)',
'America/Dawson_Creek' => 'GMT-07:00 - Denver, Phoenix, Calgary (MST)',
'America/Denver' => 'GMT-07:00 - Denver, Phoenix, Calgary (MST)',
'America/Edmonton' => 'GMT-07:00 - Denver, Phoenix, Calgary (MST)',
'America/Fort_Nelson' => 'GMT-07:00 - Denver, Phoenix, Calgary (MST)',
'America/Hermosillo' => 'GMT-07:00 - Denver, Phoenix, Calgary (MST)',
'America/Inuvik' => 'GMT-07:00 - Denver, Phoenix, Calgary (MST)',
'America/Mazatlan' => 'GMT-07:00 - Denver, Phoenix, Calgary (MST)',
'America/Phoenix' => 'GMT-07:00 - Denver, Phoenix, Calgary (MST)',
'America/Whitehorse' => 'GMT-07:00 - Denver, Phoenix, Calgary (MST)',
'America/Yellowknife' => 'GMT-07:00 - Denver, Phoenix, Calgary (MST)',
'America/Bahia_Banderas' => 'GMT-06:00 - Chicago, Mexico City, Costa Rica, Galapagos (CST)',
'America/Belize' => 'GMT-06:00 - Chicago, Mexico City, Costa Rica, Galapagos (CST)',
'America/Chicago' => 'GMT-06:00 - Chicago, Mexico City, Costa Rica, Galapagos (CST)',
'America/Chihuahua' => 'GMT-06:00 - Chicago, Mexico City, Costa Rica, Galapagos (CST)',
'America/Costa_Rica' => 'GMT-06:00 - Chicago, Mexico City, Costa Rica, Galapagos (CST)',
'America/El_Salvador' => 'GMT-06:00 - Chicago, Mexico City, Costa Rica, Galapagos (CST)',
'America/Guatemala' => 'GMT-06:00 - Chicago, Mexico City, Costa Rica, Galapagos (CST)',
'America/Indiana/Knox' => 'GMT-06:00 - Chicago, Mexico City, Costa Rica, Galapagos (CST)',
'America/Indiana/Tell_City' => 'GMT-06:00 - Chicago, Mexico City, Costa Rica, Galapagos (CST)',
'America/Managua' => 'GMT-06:00 - Chicago, Mexico City, Costa Rica, Galapagos (CST)',
'America/Matamoros' => 'GMT-06:00 - Chicago, Mexico City, Costa Rica, Galapagos (CST)',
'America/Menominee' => 'GMT-06:00 - Chicago, Mexico City, Costa Rica, Galapagos (CST)',
'America/Merida' => 'GMT-06:00 - Chicago, Mexico City, Costa Rica, Galapagos (CST)',
'America/Mexico_City' => 'GMT-06:00 - Chicago, Mexico City, Costa Rica, Galapagos (CST)',
'America/Monterrey' => 'GMT-06:00 - Chicago, Mexico City, Costa Rica, Galapagos (CST)',
'America/North_Dakota/Beulah' => 'GMT-06:00 - Chicago, Mexico City, Costa Rica, Galapagos (CST)',
'America/North_Dakota/Center' => 'GMT-06:00 - Chicago, Mexico City, Costa Rica, Galapagos (CST)',
'America/North_Dakota/New_Salem' => 'GMT-06:00 - Chicago, Mexico City, Costa Rica, Galapagos (CST)',
'America/Ojinaga' => 'GMT-06:00 - Chicago, Mexico City, Costa Rica, Galapagos (CST)',
'America/Rainy_River' => 'GMT-06:00 - Chicago, Mexico City, Costa Rica, Galapagos (CST)',
'America/Rankin_Inlet' => 'GMT-06:00 - Chicago, Mexico City, Costa Rica, Galapagos (CST)',
'America/Regina' => 'GMT-06:00 - Chicago, Mexico City, Costa Rica, Galapagos (CST)',
'America/Resolute' => 'GMT-06:00 - Chicago, Mexico City, Costa Rica, Galapagos (CST)',
'America/Swift_Current' => 'GMT-06:00 - Chicago, Mexico City, Costa Rica, Galapagos (CST)',
'America/Tegucigalpa' => 'GMT-06:00 - Chicago, Mexico City, Costa Rica, Galapagos (CST)',
'America/Winnipeg' => 'GMT-06:00 - Chicago, Mexico City, Costa Rica, Galapagos (CST)',
'Pacific/Galapagos' => 'GMT-06:00 - Chicago, Mexico City, Costa Rica, Galapagos (CST)',
'America/Bogota' => 'GMT-05:00 - New York, Toronto, Lima, Bogota (EST)',
'America/Cancun' => 'GMT-05:00 - New York, Toronto, Lima, Bogota (EST)',
'America/Cayman' => 'GMT-05:00 - New York, Toronto, Lima, Bogota (EST)',
'America/Coral_Harbour' => 'GMT-05:00 - New York, Toronto, Lima, Bogota (EST)',
'America/Detroit' => 'GMT-05:00 - New York, Toronto, Lima, Bogota (EST)',
'America/Eirunepe' => 'GMT-05:00 - New York, Toronto, Lima, Bogota (EST)',
'America/Grand_Turk' => 'GMT-05:00 - New York, Toronto, Lima, Bogota (EST)',
'America/Guayaquil' => 'GMT-05:00 - New York, Toronto, Lima, Bogota (EST)',
'America/Havana' => 'GMT-05:00 - New York, Toronto, Lima, Bogota (EST)',
'America/Indiana/Indianapolis' => 'GMT-05:00 - New York, Toronto, Lima, Bogota (EST)',
'America/Indiana/Marengo' => 'GMT-05:00 - New York, Toronto, Lima, Bogota (EST)',
'America/Indiana/Petersburg' => 'GMT-05:00 - New York, Toronto, Lima, Bogota (EST)',
'America/Indiana/Vevay' => 'GMT-05:00 - New York, Toronto, Lima, Bogota (EST)',
'America/Indiana/Vincennes' => 'GMT-05:00 - New York, Toronto, Lima, Bogota (EST)',
'America/Indiana/Winamac' => 'GMT-05:00 - New York, Toronto, Lima, Bogota (EST)',
'America/Iqaluit' => 'GMT-05:00 - New York, Toronto, Lima, Bogota (EST)',
'America/Jamaica' => 'GMT-05:00 - New York, Toronto, Lima, Bogota (EST)',
'America/Kentucky/Monticello' => 'GMT-05:00 - New York, Toronto, Lima, Bogota (EST)',
'America/Lima' => 'GMT-05:00 - New York, Toronto, Lima, Bogota (EST)',
'America/Louisville' => 'GMT-05:00 - New York, Toronto, Lima, Bogota (EST)',
'America/Montreal' => 'GMT-05:00 - New York, Toronto, Lima, Bogota (EST)',
'America/Nassau' => 'GMT-05:00 - New York, Toronto, Lima, Bogota (EST)',
'America/New_York' => 'GMT-05:00 - New York, Toronto, Lima, Bogota (EST)',
'America/Nipigon' => 'GMT-05:00 - New York, Toronto, Lima, Bogota (EST)',
'America/Panama' => 'GMT-05:00 - New York, Toronto, Lima, Bogota (EST)',
'America/Pangnirtung' => 'GMT-05:00 - New York, Toronto, Lima, Bogota (EST)',
'America/Port-au-Prince' => 'GMT-05:00 - New York, Toronto, Lima, Bogota (EST)',
'America/Rio_Branco' => 'GMT-05:00 - New York, Toronto, Lima, Bogota (EST)',
'America/Thunder_Bay' => 'GMT-05:00 - New York, Toronto, Lima, Bogota (EST)',
'America/Toronto' => 'GMT-05:00 - New York, Toronto, Lima, Bogota (EST)',
'Pacific/Easter' => 'GMT-05:00 - New York, Toronto, Lima, Bogota (EST)',
'America/Anguilla' => 'GMT-04:00 - Halifax, Santiago, Caracas, La Paz (AST)',
'America/Antigua' => 'GMT-04:00 - Halifax, Santiago, Caracas, La Paz (AST)',
'America/Aruba' => 'GMT-04:00 - Halifax, Santiago, Caracas, La Paz (AST)',
'America/Barbados' => 'GMT-04:00 - Halifax, Santiago, Caracas, La Paz (AST)',
'America/Blanc-Sablon' => 'GMT-04:00 - Halifax, Santiago, Caracas, La Paz (AST)',
'America/Boa_Vista' => 'GMT-04:00 - Halifax, Santiago, Caracas, La Paz (AST)',
'America/Campo_Grande' => 'GMT-04:00 - Halifax, Santiago, Caracas, La Paz (AST)',
'America/Caracas' => 'GMT-04:00 - Halifax, Santiago, Caracas, La Paz (AST)',
'America/Cuiaba' => 'GMT-04:00 - Halifax, Santiago, Caracas, La Paz (AST)',
'America/Curacao' => 'GMT-04:00 - Halifax, Santiago, Caracas, La Paz (AST)',
'America/Dominica' => 'GMT-04:00 - Halifax, Santiago, Caracas, La Paz (AST)',
'America/Glace_Bay' => 'GMT-04:00 - Halifax, Santiago, Caracas, La Paz (AST)',
'America/Goose_Bay' => 'GMT-04:00 - Halifax, Santiago, Caracas, La Paz (AST)',
'America/Grenada' => 'GMT-04:00 - Halifax, Santiago, Caracas, La Paz (AST)',
'America/Guadeloupe' => 'GMT-04:00 - Halifax, Santiago, Caracas, La Paz (AST)',
'America/Guyana' => 'GMT-04:00 - Halifax, Santiago, Caracas, La Paz (AST)',
'America/Halifax' => 'GMT-04:00 - Halifax, Santiago, Caracas, La Paz (AST)',
'America/Kralendijk' => 'GMT-04:00 - Halifax, Santiago, Caracas, La Paz (AST)',
'America/La_Paz' => 'GMT-04:00 - Halifax, Santiago, Caracas, La Paz (AST)',
'America/Lower_Princes' => 'GMT-04:00 - Halifax, Santiago, Caracas, La Paz (AST)',
'America/Manaus' => 'GMT-04:00 - Halifax, Santiago, Caracas, La Paz (AST)',
'America/Marigot' => 'GMT-04:00 - Halifax, Santiago, Caracas, La Paz (AST)',
'America/Martinique' => 'GMT-04:00 - Halifax, Santiago, Caracas, La Paz (AST)',
'America/Moncton' => 'GMT-04:00 - Halifax, Santiago, Caracas, La Paz (AST)',
'America/Montserrat' => 'GMT-04:00 - Halifax, Santiago, Caracas, La Paz (AST)',
'America/Port_of_Spain' => 'GMT-04:00 - Halifax, Santiago, Caracas, La Paz (AST)',
'America/Porto_Velho' => 'GMT-04:00 - Halifax, Santiago, Caracas, La Paz (AST)',
'America/Puerto_Rico' => 'GMT-04:00 - Halifax, Santiago, Caracas, La Paz (AST)',
'America/Santo_Domingo' => 'GMT-04:00 - Halifax, Santiago, Caracas, La Paz (AST)',
'America/St_Barthelemy' => 'GMT-04:00 - Halifax, Santiago, Caracas, La Paz (AST)',
'America/St_Kitts' => 'GMT-04:00 - Halifax, Santiago, Caracas, La Paz (AST)',
'America/St_Lucia' => 'GMT-04:00 - Halifax, Santiago, Caracas, La Paz (AST)',
'America/St_Thomas' => 'GMT-04:00 - Halifax, Santiago, Caracas, La Paz (AST)',
'America/St_Vincent' => 'GMT-04:00 - Halifax, Santiago, Caracas, La Paz (AST)',
'America/Thule' => 'GMT-04:00 - Halifax, Santiago, Caracas, La Paz (AST)',
'America/Tortola' => 'GMT-04:00 - Halifax, Santiago, Caracas, La Paz (AST)',
'Atlantic/Bermuda' => 'GMT-04:00 - Halifax, Santiago, Caracas, La Paz (AST)',
'America/St_Johns' => 'GMT-03:30 - St. John\'s (NST)',
'America/Araguaina' => 'GMT-03:00 - São Paulo, Buenos Aires, Montevideo (BRT)',
'America/Argentina/Buenos_Aires' => 'GMT-03:00 - São Paulo, Buenos Aires, Montevideo (BRT)',
'America/Argentina/La_Rioja' => 'GMT-03:00 - São Paulo, Buenos Aires, Montevideo (BRT)',
'America/Argentina/Rio_Gallegos' => 'GMT-03:00 - São Paulo, Buenos Aires, Montevideo (BRT)',
'America/Argentina/Salta' => 'GMT-03:00 - São Paulo, Buenos Aires, Montevideo (BRT)',
'America/Argentina/San_Juan' => 'GMT-03:00 - São Paulo, Buenos Aires, Montevideo (BRT)',
'America/Argentina/San_Luis' => 'GMT-03:00 - São Paulo, Buenos Aires, Montevideo (BRT)',
'America/Argentina/Tucuman' => 'GMT-03:00 - São Paulo, Buenos Aires, Montevideo (BRT)',
'America/Argentina/Ushuaia' => 'GMT-03:00 - São Paulo, Buenos Aires, Montevideo (BRT)',
'America/Asuncion' => 'GMT-03:00 - São Paulo, Buenos Aires, Montevideo (BRT)',
'America/Bahia' => 'GMT-03:00 - São Paulo, Buenos Aires, Montevideo (BRT)',
'America/Belem' => 'GMT-03:00 - São Paulo, Buenos Aires, Montevideo (BRT)',
'America/Catamarca' => 'GMT-03:00 - São Paulo, Buenos Aires, Montevideo (BRT)',
'America/Cayenne' => 'GMT-03:00 - São Paulo, Buenos Aires, Montevideo (BRT)',
'America/Cordoba' => 'GMT-03:00 - São Paulo, Buenos Aires, Montevideo (BRT)',
'America/Fortaleza' => 'GMT-03:00 - São Paulo, Buenos Aires, Montevideo (BRT)',
'America/Jujuy' => 'GMT-03:00 - São Paulo, Buenos Aires, Montevideo (BRT)',
'America/Maceio' => 'GMT-03:00 - São Paulo, Buenos Aires, Montevideo (BRT)',
'America/Mendoza' => 'GMT-03:00 - São Paulo, Buenos Aires, Montevideo (BRT)',
'America/Miquelon' => 'GMT-03:00 - São Paulo, Buenos Aires, Montevideo (BRT)',
'America/Montevideo' => 'GMT-03:00 - São Paulo, Buenos Aires, Montevideo (BRT)',
'America/Paramaribo' => 'GMT-03:00 - São Paulo, Buenos Aires, Montevideo (BRT)',
'America/Punta_Arenas' => 'GMT-03:00 - São Paulo, Buenos Aires, Montevideo (BRT)',
'America/Recife' => 'GMT-03:00 - São Paulo, Buenos Aires, Montevideo (BRT)',
'America/Santarem' => 'GMT-03:00 - São Paulo, Buenos Aires, Montevideo (BRT)',
'America/Santiago' => 'GMT-03:00 - São Paulo, Buenos Aires, Montevideo (BRT)',
'America/Sao_Paulo' => 'GMT-03:00 - São Paulo, Buenos Aires, Montevideo (BRT)',
'Antarctica/Palmer' => 'GMT-03:00 - São Paulo, Buenos Aires, Montevideo (BRT)',
'Antarctica/Rothera' => 'GMT-03:00 - São Paulo, Buenos Aires, Montevideo (BRT)',
'Atlantic/Stanley' => 'GMT-03:00 - São Paulo, Buenos Aires, Montevideo (BRT)',
'America/Godthab' => 'GMT-02:00 - Fernando de Noronha, South Georgia (FNT)',
'America/Noronha' => 'GMT-02:00 - Fernando de Noronha, South Georgia (FNT)',
'America/Scoresbysund' => 'GMT-02:00 - Fernando de Noronha, South Georgia (FNT)',
'Atlantic/South_Georgia' => 'GMT-02:00 - Fernando de Noronha, South Georgia (FNT)',
'Atlantic/Azores' => 'GMT-01:00 - Cape Verde, Azores (CVT)',
'Atlantic/Cape_Verde' => 'GMT-01:00 - Cape Verde, Azores (CVT)',
'Africa/Abidjan' => 'GMT+00:00 - London, Dublin, Lisbon, Reykjavik, Accra (GMT)',
'Africa/Accra' => 'GMT+00:00 - London, Dublin, Lisbon, Reykjavik, Accra (GMT)',
'Africa/Bamako' => 'GMT+00:00 - London, Dublin, Lisbon, Reykjavik, Accra (GMT)',
'Africa/Banjul' => 'GMT+00:00 - London, Dublin, Lisbon, Reykjavik, Accra (GMT)',
'Africa/Bissau' => 'GMT+00:00 - London, Dublin, Lisbon, Reykjavik, Accra (GMT)',
'Africa/Casablanca' => 'GMT+00:00 - London, Dublin, Lisbon, Reykjavik, Accra (GMT)',
'Africa/Conakry' => 'GMT+00:00 - London, Dublin, Lisbon, Reykjavik, Accra (GMT)',
'Africa/Dakar' => 'GMT+00:00 - London, Dublin, Lisbon, Reykjavik, Accra (GMT)',
'Africa/El_Aaiun' => 'GMT+00:00 - London, Dublin, Lisbon, Reykjavik, Accra (GMT)',
'Africa/Freetown' => 'GMT+00:00 - London, Dublin, Lisbon, Reykjavik, Accra (GMT)',
'Africa/Lome' => 'GMT+00:00 - London, Dublin, Lisbon, Reykjavik, Accra (GMT)',
'Africa/Monrovia' => 'GMT+00:00 - London, Dublin, Lisbon, Reykjavik, Accra (GMT)',
'Africa/Nouakchott' => 'GMT+00:00 - London, Dublin, Lisbon, Reykjavik, Accra (GMT)',
'Africa/Ouagadougou' => 'GMT+00:00 - London, Dublin, Lisbon, Reykjavik, Accra (GMT)',
'Africa/Sao_Tome' => 'GMT+00:00 - London, Dublin, Lisbon, Reykjavik, Accra (GMT)',
'America/Danmarkshavn' => 'GMT+00:00 - London, Dublin, Lisbon, Reykjavik, Accra (GMT)',
'Antarctica/Troll' => 'GMT+00:00 - London, Dublin, Lisbon, Reykjavik, Accra (GMT)',
'Atlantic/Canary' => 'GMT+00:00 - London, Dublin, Lisbon, Reykjavik, Accra (GMT)',
'Atlantic/Faeroe' => 'GMT+00:00 - London, Dublin, Lisbon, Reykjavik, Accra (GMT)',
'Atlantic/Madeira' => 'GMT+00:00 - London, Dublin, Lisbon, Reykjavik, Accra (GMT)',
'Atlantic/Reykjavik' => 'GMT+00:00 - London, Dublin, Lisbon, Reykjavik, Accra (GMT)',
'Atlantic/St_Helena' => 'GMT+00:00 - London, Dublin, Lisbon, Reykjavik, Accra (GMT)',
'Europe/Dublin' => 'GMT+00:00 - London, Dublin, Lisbon, Reykjavik, Accra (GMT)',
'Europe/Guernsey' => 'GMT+00:00 - London, Dublin, Lisbon, Reykjavik, Accra (GMT)',
'Europe/Isle_of_Man' => 'GMT+00:00 - London, Dublin, Lisbon, Reykjavik, Accra (GMT)',
'Europe/Jersey' => 'GMT+00:00 - London, Dublin, Lisbon, Reykjavik, Accra (GMT)',
'Europe/Lisbon' => 'GMT+00:00 - London, Dublin, Lisbon, Reykjavik, Accra (GMT)',
'Europe/London' => 'GMT+00:00 - London, Dublin, Lisbon, Reykjavik, Accra (GMT)',
'Africa/Algiers' => 'GMT+01:00 - Paris, Berlin, Rome, Lagos, Kinshasa (CET)',
'Africa/Bangui' => 'GMT+01:00 - Paris, Berlin, Rome, Lagos, Kinshasa (CET)',
'Africa/Brazzaville' => 'GMT+01:00 - Paris, Berlin, Rome, Lagos, Kinshasa (CET)',
'Africa/Ceuta' => 'GMT+01:00 - Paris, Berlin, Rome, Lagos, Kinshasa (CET)',
'Africa/Douala' => 'GMT+01:00 - Paris, Berlin, Rome, Lagos, Kinshasa (CET)',
'Africa/Kinshasa' => 'GMT+01:00 - Paris, Berlin, Rome, Lagos, Kinshasa (CET)',
'Africa/Lagos' => 'GMT+01:00 - Paris, Berlin, Rome, Lagos, Kinshasa (CET)',
'Africa/Libreville' => 'GMT+01:00 - Paris, Berlin, Rome, Lagos, Kinshasa (CET)',
'Africa/Luanda' => 'GMT+01:00 - Paris, Berlin, Rome, Lagos, Kinshasa (CET)',
'Africa/Malabo' => 'GMT+01:00 - Paris, Berlin, Rome, Lagos, Kinshasa (CET)',
'Africa/Ndjamena' => 'GMT+01:00 - Paris, Berlin, Rome, Lagos, Kinshasa (CET)',
'Africa/Niamey' => 'GMT+01:00 - Paris, Berlin, Rome, Lagos, Kinshasa (CET)',
'Africa/Porto-Novo' => 'GMT+01:00 - Paris, Berlin, Rome, Lagos, Kinshasa (CET)',
'Africa/Tunis' => 'GMT+01:00 - Paris, Berlin, Rome, Lagos, Kinshasa (CET)',
'Arctic/Longyearbyen' => 'GMT+01:00 - Paris, Berlin, Rome, Lagos, Kinshasa (CET)',
'Europe/Amsterdam' => 'GMT+01:00 - Paris, Berlin, Rome, Lagos, Kinshasa (CET)',
'Europe/Andorra' => 'GMT+01:00 - Paris, Berlin, Rome, Lagos, Kinshasa (CET)',
'Europe/Belgrade' => 'GMT+01:00 - Paris, Berlin, Rome, Lagos, Kinshasa (CET)',
'Europe/Berlin' => 'GMT+01:00 - Paris, Berlin, Rome, Lagos, Kinshasa (CET)',
'Europe/Bratislava' => 'GMT+01:00 - Paris, Berlin, Rome, Lagos, Kinshasa (CET)',
'Europe/Brussels' => 'GMT+01:00 - Paris, Berlin, Rome, Lagos, Kinshasa (CET)',
'Europe/Budapest' => 'GMT+01:00 - Paris, Berlin, Rome, Lagos, Kinshasa (CET)',
'Europe/Busingen' => 'GMT+01:00 - Paris, Berlin, Rome, Lagos, Kinshasa (CET)',
'Europe/Copenhagen' => 'GMT+01:00 - Paris, Berlin, Rome, Lagos, Kinshasa (CET)',
'Europe/Gibraltar' => 'GMT+01:00 - Paris, Berlin, Rome, Lagos, Kinshasa (CET)',
'Europe/Ljubljana' => 'GMT+01:00 - Paris, Berlin, Rome, Lagos, Kinshasa (CET)',
'Europe/Luxembourg' => 'GMT+01:00 - Paris, Berlin, Rome, Lagos, Kinshasa (CET)',
'Europe/Madrid' => 'GMT+01:00 - Paris, Berlin, Rome, Lagos, Kinshasa (CET)',
'Europe/Malta' => 'GMT+01:00 - Paris, Berlin, Rome, Lagos, Kinshasa (CET)',
'Europe/Monaco' => 'GMT+01:00 - Paris, Berlin, Rome, Lagos, Kinshasa (CET)',
'Europe/Oslo' => 'GMT+01:00 - Paris, Berlin, Rome, Lagos, Kinshasa (CET)',
'Europe/Paris' => 'GMT+01:00 - Paris, Berlin, Rome, Lagos, Kinshasa (CET)',
'Europe/Podgorica' => 'GMT+01:00 - Paris, Berlin, Rome, Lagos, Kinshasa (CET)',
'Europe/Prague' => 'GMT+01:00 - Paris, Berlin, Rome, Lagos, Kinshasa (CET)',
'Europe/Rome' => 'GMT+01:00 - Paris, Berlin, Rome, Lagos, Kinshasa (CET)',
'Europe/San_Marino' => 'GMT+01:00 - Paris, Berlin, Rome, Lagos, Kinshasa (CET)',
'Europe/Sarajevo' => 'GMT+01:00 - Paris, Berlin, Rome, Lagos, Kinshasa (CET)',
'Europe/Skopje' => 'GMT+01:00 - Paris, Berlin, Rome, Lagos, Kinshasa (CET)',
'Europe/Stockholm' => 'GMT+01:00 - Paris, Berlin, Rome, Lagos, Kinshasa (CET)',
'Europe/Tirane' => 'GMT+01:00 - Paris, Berlin, Rome, Lagos, Kinshasa (CET)',
'Europe/Vaduz' => 'GMT+01:00 - Paris, Berlin, Rome, Lagos, Kinshasa (CET)',
'Europe/Vatican' => 'GMT+01:00 - Paris, Berlin, Rome, Lagos, Kinshasa (CET)',
'Europe/Vienna' => 'GMT+01:00 - Paris, Berlin, Rome, Lagos, Kinshasa (CET)',
'Europe/Warsaw' => 'GMT+01:00 - Paris, Berlin, Rome, Lagos, Kinshasa (CET)',
'Europe/Zagreb' => 'GMT+01:00 - Paris, Berlin, Rome, Lagos, Kinshasa (CET)',
'Europe/Zurich' => 'GMT+01:00 - Paris, Berlin, Rome, Lagos, Kinshasa (CET)'
};
String query = 'SELECT Id, ' + sourceField + ', ' + targetField
    + ' FROM ' + sObjectName
    + ' WHERE ' + sourceField + ' != NULL'
    + ' AND ' + targetField + ' = NULL'
    + ' LIMIT ' + recordLimit;
List<SObject> records = Database.query(query);
List<SObject> toUpdate = new List<SObject>();
Integer matchCount = 0;
for (SObject rec : records) {
    String sfTz = (String) rec.get(sourceField);
    if (String.isNotBlank(sfTz) && tzMap.containsKey(sfTz)) {
        rec.put(targetField, tzMap.get(sfTz));
        toUpdate.add(rec);
        matchCount++;
    } 
}
if (!toUpdate.isEmpty()) {
    Database.SaveResult[] results = Database.update(toUpdate, false);
    Integer successCount = 0, failCount = 0;
    for (Database.SaveResult sr : results) {
        if (sr.isSuccess()) { successCount++; }
        else {
            failCount++;
            for (Database.Error e : sr.getErrors())
                System.debug('Update failed: ' + sr.getId() + ' | ' + e.getMessage());
        }
    }
    System.debug('=== PART 1 COMPLETE === Updated: ' + successCount + ' | Failed: ' + failCount);
} else {
    System.debug('=== PART 1: No matching records to update ===');
}
// ============================================================
// PART 2 
// Exceute this salesforce developer console or workbench 
// ============================================================
String  sObjectName  = 'Account';                     // e.g. 'Account', 'Contact', 'Lead'
Integer recordLimit  = 5000;                          // Max limit 10000, Update as per org configuration 
String sourceField = 'Dialpad__Timezone__c';          // Old Text Field API
String targetField = 'Dialpad__Dialpad_Timezone__c'; // New Picklist Field API 
// ============================================================
// Creating old value to new value Map - 2nd set 
// ============================================================
Map<String, String> tzMap = new Map<String, String>{
'Africa/Blantyre' => 'GMT+02:00 - Cairo, Johannesburg, Helsinki, Kyiv, Jerusalem (EET)',
'Africa/Bujumbura' => 'GMT+02:00 - Cairo, Johannesburg, Helsinki, Kyiv, Jerusalem (EET)',
'Africa/Cairo' => 'GMT+02:00 - Cairo, Johannesburg, Helsinki, Kyiv, Jerusalem (EET)',
'Africa/Gaborone' => 'GMT+02:00 - Cairo, Johannesburg, Helsinki, Kyiv, Jerusalem (EET)',
'Africa/Harare' => 'GMT+02:00 - Cairo, Johannesburg, Helsinki, Kyiv, Jerusalem (EET)',
'Africa/Johannesburg' => 'GMT+02:00 - Cairo, Johannesburg, Helsinki, Kyiv, Jerusalem (EET)',
'Africa/Juba' => 'GMT+02:00 - Cairo, Johannesburg, Helsinki, Kyiv, Jerusalem (EET)',
'Africa/Khartoum' => 'GMT+02:00 - Cairo, Johannesburg, Helsinki, Kyiv, Jerusalem (EET)',
'Africa/Kigali' => 'GMT+02:00 - Cairo, Johannesburg, Helsinki, Kyiv, Jerusalem (EET)',
'Africa/Lubumbashi' => 'GMT+02:00 - Cairo, Johannesburg, Helsinki, Kyiv, Jerusalem (EET)',
'Africa/Lusaka' => 'GMT+02:00 - Cairo, Johannesburg, Helsinki, Kyiv, Jerusalem (EET)',
'Africa/Maputo' => 'GMT+02:00 - Cairo, Johannesburg, Helsinki, Kyiv, Jerusalem (EET)',
'Africa/Maseru' => 'GMT+02:00 - Cairo, Johannesburg, Helsinki, Kyiv, Jerusalem (EET)',
'Africa/Mbabane' => 'GMT+02:00 - Cairo, Johannesburg, Helsinki, Kyiv, Jerusalem (EET)',
'Africa/Tripoli' => 'GMT+02:00 - Cairo, Johannesburg, Helsinki, Kyiv, Jerusalem (EET)',
'Africa/Windhoek' => 'GMT+02:00 - Cairo, Johannesburg, Helsinki, Kyiv, Jerusalem (EET)',
'Asia/Beirut' => 'GMT+02:00 - Cairo, Johannesburg, Helsinki, Kyiv, Jerusalem (EET)',
'Asia/Famagusta' => 'GMT+02:00 - Cairo, Johannesburg, Helsinki, Kyiv, Jerusalem (EET)',
'Asia/Gaza' => 'GMT+02:00 - Cairo, Johannesburg, Helsinki, Kyiv, Jerusalem (EET)',
'Asia/Hebron' => 'GMT+02:00 - Cairo, Johannesburg, Helsinki, Kyiv, Jerusalem (EET)',
'Asia/Jerusalem' => 'GMT+02:00 - Cairo, Johannesburg, Helsinki, Kyiv, Jerusalem (EET)',
'Asia/Nicosia' => 'GMT+02:00 - Cairo, Johannesburg, Helsinki, Kyiv, Jerusalem (EET)',
'Europe/Athens' => 'GMT+02:00 - Cairo, Johannesburg, Helsinki, Kyiv, Jerusalem (EET)',
'Europe/Bucharest' => 'GMT+02:00 - Cairo, Johannesburg, Helsinki, Kyiv, Jerusalem (EET)',
'Europe/Chisinau' => 'GMT+02:00 - Cairo, Johannesburg, Helsinki, Kyiv, Jerusalem (EET)',
'Europe/Helsinki' => 'GMT+02:00 - Cairo, Johannesburg, Helsinki, Kyiv, Jerusalem (EET)',
'Europe/Kaliningrad' => 'GMT+02:00 - Cairo, Johannesburg, Helsinki, Kyiv, Jerusalem (EET)',
'Europe/Kyiv' => 'GMT+02:00 - Cairo, Johannesburg, Helsinki, Kyiv, Jerusalem (EET)',
'Europe/Mariehamn' => 'GMT+02:00 - Cairo, Johannesburg, Helsinki, Kyiv, Jerusalem (EET)',
'Europe/Riga' => 'GMT+02:00 - Cairo, Johannesburg, Helsinki, Kyiv, Jerusalem (EET)',
'Europe/Sofia' => 'GMT+02:00 - Cairo, Johannesburg, Helsinki, Kyiv, Jerusalem (EET)',
'Europe/Tallinn' => 'GMT+02:00 - Cairo, Johannesburg, Helsinki, Kyiv, Jerusalem (EET)',
'Europe/Uzhgorod' => 'GMT+02:00 - Cairo, Johannesburg, Helsinki, Kyiv, Jerusalem (EET)',
'Europe/Vilnius' => 'GMT+02:00 - Cairo, Johannesburg, Helsinki, Kyiv, Jerusalem (EET)',
'Europe/Zaporozhye' => 'GMT+02:00 - Cairo, Johannesburg, Helsinki, Kyiv, Jerusalem (EET)',
'Africa/Addis_Ababa' => 'GMT+03:00 - Moscow, Nairobi, Baghdad, Riyadh, Istanbul (MSK)',
'Africa/Asmera' => 'GMT+03:00 - Moscow, Nairobi, Baghdad, Riyadh, Istanbul (MSK)',
'Africa/Dar_es_Salaam' => 'GMT+03:00 - Moscow, Nairobi, Baghdad, Riyadh, Istanbul (MSK)',
'Africa/Djibouti' => 'GMT+03:00 - Moscow, Nairobi, Baghdad, Riyadh, Istanbul (MSK)',
'Africa/Kampala' => 'GMT+03:00 - Moscow, Nairobi, Baghdad, Riyadh, Istanbul (MSK)',
'Africa/Mogadishu' => 'GMT+03:00 - Moscow, Nairobi, Baghdad, Riyadh, Istanbul (MSK)',
'Africa/Nairobi' => 'GMT+03:00 - Moscow, Nairobi, Baghdad, Riyadh, Istanbul (MSK)',
'Antarctica/Syowa' => 'GMT+03:00 - Moscow, Nairobi, Baghdad, Riyadh, Istanbul (MSK)',
'Asia/Aden' => 'GMT+03:00 - Moscow, Nairobi, Baghdad, Riyadh, Istanbul (MSK)',
'Asia/Amman' => 'GMT+03:00 - Moscow, Nairobi, Baghdad, Riyadh, Istanbul (MSK)',
'Asia/Baghdad' => 'GMT+03:00 - Moscow, Nairobi, Baghdad, Riyadh, Istanbul (MSK)',
'Asia/Bahrain' => 'GMT+03:00 - Moscow, Nairobi, Baghdad, Riyadh, Istanbul (MSK)',
'Asia/Damascus' => 'GMT+03:00 - Moscow, Nairobi, Baghdad, Riyadh, Istanbul (MSK)',
'Asia/Kuwait' => 'GMT+03:00 - Moscow, Nairobi, Baghdad, Riyadh, Istanbul (MSK)',
'Asia/Qatar' => 'GMT+03:00 - Moscow, Nairobi, Baghdad, Riyadh, Istanbul (MSK)',
'Asia/Riyadh' => 'GMT+03:00 - Moscow, Nairobi, Baghdad, Riyadh, Istanbul (MSK)',
'Europe/Istanbul' => 'GMT+03:00 - Moscow, Nairobi, Baghdad, Riyadh, Istanbul (MSK)',
'Europe/Kirov' => 'GMT+03:00 - Moscow, Nairobi, Baghdad, Riyadh, Istanbul (MSK)',
'Europe/Minsk' => 'GMT+03:00 - Moscow, Nairobi, Baghdad, Riyadh, Istanbul (MSK)',
'Europe/Moscow' => 'GMT+03:00 - Moscow, Nairobi, Baghdad, Riyadh, Istanbul (MSK)',
'Europe/Simferopol' => 'GMT+03:00 - Moscow, Nairobi, Baghdad, Riyadh, Istanbul (MSK)',
'Europe/Volgograd' => 'GMT+03:00 - Moscow, Nairobi, Baghdad, Riyadh, Istanbul (MSK)',
'Indian/Antananarivo' => 'GMT+03:00 - Moscow, Nairobi, Baghdad, Riyadh, Istanbul (MSK)',
'Indian/Comoro' => 'GMT+03:00 - Moscow, Nairobi, Baghdad, Riyadh, Istanbul (MSK)',
'Indian/Mayotte' => 'GMT+03:00 - Moscow, Nairobi, Baghdad, Riyadh, Istanbul (MSK)',
'Asia/Tehran' => 'GMT+03:30 - Tehran (IRST)',
'Asia/Baku' => 'GMT+04:00 - Dubai, Baku, Tbilisi, Mauritius (GST)',
'Asia/Dubai' => 'GMT+04:00 - Dubai, Baku, Tbilisi, Mauritius (GST)',
'Asia/Muscat' => 'GMT+04:00 - Dubai, Baku, Tbilisi, Mauritius (GST)',
'Asia/Tbilisi' => 'GMT+04:00 - Dubai, Baku, Tbilisi, Mauritius (GST)',
'Asia/Yerevan' => 'GMT+04:00 - Dubai, Baku, Tbilisi, Mauritius (GST)',
'Europe/Astrakhan' => 'GMT+04:00 - Dubai, Baku, Tbilisi, Mauritius (GST)',
'Europe/Samara' => 'GMT+04:00 - Dubai, Baku, Tbilisi, Mauritius (GST)',
'Europe/Saratov' => 'GMT+04:00 - Dubai, Baku, Tbilisi, Mauritius (GST)',
'Europe/Ulyanovsk' => 'GMT+04:00 - Dubai, Baku, Tbilisi, Mauritius (GST)',
'Indian/Mahe' => 'GMT+04:00 - Dubai, Baku, Tbilisi, Mauritius (GST)',
'Indian/Mauritius' => 'GMT+04:00 - Dubai, Baku, Tbilisi, Mauritius (GST)',
'Indian/Reunion' => 'GMT+04:00 - Dubai, Baku, Tbilisi, Mauritius (GST)',
'Asia/Kabul' => 'GMT+04:30 - Kabul (AFT)',
'Antarctica/Mawson' => 'GMT+05:00 - Karachi, Islamabad, Tashkent, Yekaterinburg (PKT)',
'Antarctica/Vostok' => 'GMT+05:00 - Karachi, Islamabad, Tashkent, Yekaterinburg (PKT)',
'Asia/Almaty' => 'GMT+05:00 - Karachi, Islamabad, Tashkent, Yekaterinburg (PKT)',
'Asia/Aqtau' => 'GMT+05:00 - Karachi, Islamabad, Tashkent, Yekaterinburg (PKT)',
'Asia/Aqtobe' => 'GMT+05:00 - Karachi, Islamabad, Tashkent, Yekaterinburg (PKT)',
'Asia/Ashgabat' => 'GMT+05:00 - Karachi, Islamabad, Tashkent, Yekaterinburg (PKT)',
'Asia/Atyrau' => 'GMT+05:00 - Karachi, Islamabad, Tashkent, Yekaterinburg (PKT)',
'Asia/Dushanbe' => 'GMT+05:00 - Karachi, Islamabad, Tashkent, Yekaterinburg (PKT)',
'Asia/Karachi' => 'GMT+05:00 - Karachi, Islamabad, Tashkent, Yekaterinburg (PKT)',
'Asia/Oral' => 'GMT+05:00 - Karachi, Islamabad, Tashkent, Yekaterinburg (PKT)',
'Asia/Qostanay' => 'GMT+05:00 - Karachi, Islamabad, Tashkent, Yekaterinburg (PKT)',
'Asia/Qyzylorda' => 'GMT+05:00 - Karachi, Islamabad, Tashkent, Yekaterinburg (PKT)',
'Asia/Samarkand' => 'GMT+05:00 - Karachi, Islamabad, Tashkent, Yekaterinburg (PKT)',
'Asia/Tashkent' => 'GMT+05:00 - Karachi, Islamabad, Tashkent, Yekaterinburg (PKT)',
'Asia/Yekaterinburg' => 'GMT+05:00 - Karachi, Islamabad, Tashkent, Yekaterinburg (PKT)',
'Indian/Kerguelen' => 'GMT+05:00 - Karachi, Islamabad, Tashkent, Yekaterinburg (PKT)',
'Indian/Maldives' => 'GMT+05:00 - Karachi, Islamabad, Tashkent, Yekaterinburg (PKT)',
'Asia/Colombo' => 'GMT+05:30 - New Delhi, Mumbai, Colombo (IST)',
'Asia/Kolkata' => 'GMT+05:30 - New Delhi, Mumbai, Colombo (IST)',
'Asia/Kathmandu' => 'GMT+05:45 - Kathmandu (NPT)',
'Asia/Bishkek' => 'GMT+06:00 - Dhaka, Almaty, Thimphu (BST)',
'Asia/Dhaka' => 'GMT+06:00 - Dhaka, Almaty, Thimphu (BST)',
'Asia/Omsk' => 'GMT+06:00 - Dhaka, Almaty, Thimphu (BST)',
'Asia/Thimphu' => 'GMT+06:00 - Dhaka, Almaty, Thimphu (BST)',
'Asia/Urumqi' => 'GMT+06:00 - Dhaka, Almaty, Thimphu (BST)',
'Indian/Chagos' => 'GMT+06:00 - Dhaka, Almaty, Thimphu (BST)',
'Asia/Rangoon' => 'GMT+06:30 - Yangon, Cocos Islands (MMT)',
'Indian/Cocos' => 'GMT+06:30 - Yangon, Cocos Islands (MMT)',
'Antarctica/Davis' => 'GMT+07:00 - Bangkok, Jakarta, Hanoi, Ho Chi Minh City (ICT)',
'Asia/Bangkok' => 'GMT+07:00 - Bangkok, Jakarta, Hanoi, Ho Chi Minh City (ICT)',
'Asia/Barnaul' => 'GMT+07:00 - Bangkok, Jakarta, Hanoi, Ho Chi Minh City (ICT)',
'Asia/Ho_Chi_Minh' => 'GMT+07:00 - Bangkok, Jakarta, Hanoi, Ho Chi Minh City (ICT)',
'Asia/Hovd' => 'GMT+07:00 - Bangkok, Jakarta, Hanoi, Ho Chi Minh City (ICT)',
'Asia/Jakarta' => 'GMT+07:00 - Bangkok, Jakarta, Hanoi, Ho Chi Minh City (ICT)',
'Asia/Krasnoyarsk' => 'GMT+07:00 - Bangkok, Jakarta, Hanoi, Ho Chi Minh City (ICT)',
'Asia/Novokuznetsk' => 'GMT+07:00 - Bangkok, Jakarta, Hanoi, Ho Chi Minh City (ICT)',
'Asia/Novosibirsk' => 'GMT+07:00 - Bangkok, Jakarta, Hanoi, Ho Chi Minh City (ICT)',
'Asia/Phnom_Penh' => 'GMT+07:00 - Bangkok, Jakarta, Hanoi, Ho Chi Minh City (ICT)',
'Asia/Pontianak' => 'GMT+07:00 - Bangkok, Jakarta, Hanoi, Ho Chi Minh City (ICT)',
'Asia/Tomsk' => 'GMT+07:00 - Bangkok, Jakarta, Hanoi, Ho Chi Minh City (ICT)',
'Asia/Vientiane' => 'GMT+07:00 - Bangkok, Jakarta, Hanoi, Ho Chi Minh City (ICT)',
'Indian/Christmas' => 'GMT+07:00 - Bangkok, Jakarta, Hanoi, Ho Chi Minh City (ICT)',
'Antarctica/Casey' => 'GMT+08:00 - Beijing, Singapore, Hong Kong, Perth, Taipei (CST)',
'Asia/Brunei' => 'GMT+08:00 - Beijing, Singapore, Hong Kong, Perth, Taipei (CST)',
'Asia/Choibalsan' => 'GMT+08:00 - Beijing, Singapore, Hong Kong, Perth, Taipei (CST)',
'Asia/Hong_Kong' => 'GMT+08:00 - Beijing, Singapore, Hong Kong, Perth, Taipei (CST)',
'Asia/Irkutsk' => 'GMT+08:00 - Beijing, Singapore, Hong Kong, Perth, Taipei (CST)',
'Asia/Kuala_Lumpur' => 'GMT+08:00 - Beijing, Singapore, Hong Kong, Perth, Taipei (CST)',
'Asia/Kuching' => 'GMT+08:00 - Beijing, Singapore, Hong Kong, Perth, Taipei (CST)',
'Asia/Macau' => 'GMT+08:00 - Beijing, Singapore, Hong Kong, Perth, Taipei (CST)',
'Asia/Makassar' => 'GMT+08:00 - Beijing, Singapore, Hong Kong, Perth, Taipei (CST)',
'Asia/Manila' => 'GMT+08:00 - Beijing, Singapore, Hong Kong, Perth, Taipei (CST)',
'Asia/Shanghai' => 'GMT+08:00 - Beijing, Singapore, Hong Kong, Perth, Taipei (CST)',
'Asia/Singapore' => 'GMT+08:00 - Beijing, Singapore, Hong Kong, Perth, Taipei (CST)',
'Asia/Taipei' => 'GMT+08:00 - Beijing, Singapore, Hong Kong, Perth, Taipei (CST)',
'Asia/Ulaanbaatar' => 'GMT+08:00 - Beijing, Singapore, Hong Kong, Perth, Taipei (CST)',
'Australia/Perth' => 'GMT+08:00 - Beijing, Singapore, Hong Kong, Perth, Taipei (CST)',
'Australia/Eucla' => 'GMT+08:45 - Eucla (ACWST)',
'Asia/Chita' => 'GMT+09:00 - Tokyo, Seoul, Pyongyang (JST)',
'Asia/Dili' => 'GMT+09:00 - Tokyo, Seoul, Pyongyang (JST)',
'Asia/Jayapura' => 'GMT+09:00 - Tokyo, Seoul, Pyongyang (JST)',
'Asia/Khandyga' => 'GMT+09:00 - Tokyo, Seoul, Pyongyang (JST)',
'Asia/Pyongyang' => 'GMT+09:00 - Tokyo, Seoul, Pyongyang (JST)',
'Asia/Seoul' => 'GMT+09:00 - Tokyo, Seoul, Pyongyang (JST)',
'Asia/Tokyo' => 'GMT+09:00 - Tokyo, Seoul, Pyongyang (JST)',
'Asia/Yakutsk' => 'GMT+09:00 - Tokyo, Seoul, Pyongyang (JST)',
'Pacific/Palau' => 'GMT+09:00 - Tokyo, Seoul, Pyongyang (JST)',
'Australia/Darwin' => 'GMT+09:30 - Adelaide, Darwin (ACST)',
'Antarctica/DumontDUrville' => 'GMT+10:00 - Sydney, Brisbane, Guam, Port Moresby (AEST)',
'Asia/Ust-Nera' => 'GMT+10:00 - Sydney, Brisbane, Guam, Port Moresby (AEST)',
'Asia/Vladivostok' => 'GMT+10:00 - Sydney, Brisbane, Guam, Port Moresby (AEST)',
'Australia/Brisbane' => 'GMT+10:00 - Sydney, Brisbane, Guam, Port Moresby (AEST)',
'Australia/Lindeman' => 'GMT+10:00 - Sydney, Brisbane, Guam, Port Moresby (AEST)',
'Pacific/Guam' => 'GMT+10:00 - Sydney, Brisbane, Guam, Port Moresby (AEST)',
'Pacific/Port_Moresby' => 'GMT+10:00 - Sydney, Brisbane, Guam, Port Moresby (AEST)',
'Pacific/Saipan' => 'GMT+10:00 - Sydney, Brisbane, Guam, Port Moresby (AEST)',
'Pacific/Truk' => 'GMT+10:00 - Sydney, Brisbane, Guam, Port Moresby (AEST)',
'Australia/Adelaide' => 'GMT+10:30 - Lord Howe Island (LHST)',
'Australia/Broken_Hill' => 'GMT+10:30 - Lord Howe Island (LHST)',
'Antarctica/Macquarie' => 'GMT+11:00 - Solomon Islands, Vanuatu, Magadan (SBT)',
'Asia/Magadan' => 'GMT+11:00 - Solomon Islands, Vanuatu, Magadan (SBT)',
'Asia/Sakhalin' => 'GMT+11:00 - Solomon Islands, Vanuatu, Magadan (SBT)',
'Asia/Srednekolymsk' => 'GMT+11:00 - Solomon Islands, Vanuatu, Magadan (SBT)',
'Australia/Currie' => 'GMT+11:00 - Solomon Islands, Vanuatu, Magadan (SBT)',
'Australia/Hobart' => 'GMT+11:00 - Solomon Islands, Vanuatu, Magadan (SBT)',
'Australia/Lord_Howe' => 'GMT+11:00 - Solomon Islands, Vanuatu, Magadan (SBT)',
'Australia/Melbourne' => 'GMT+11:00 - Solomon Islands, Vanuatu, Magadan (SBT)',
'Australia/Sydney' => 'GMT+11:00 - Solomon Islands, Vanuatu, Magadan (SBT)',
'Pacific/Bougainville' => 'GMT+11:00 - Solomon Islands, Vanuatu, Magadan (SBT)',
'Pacific/Efate' => 'GMT+11:00 - Solomon Islands, Vanuatu, Magadan (SBT)',
'Pacific/Guadalcanal' => 'GMT+11:00 - Solomon Islands, Vanuatu, Magadan (SBT)',
'Pacific/Kosrae' => 'GMT+11:00 - Solomon Islands, Vanuatu, Magadan (SBT)',
'Pacific/Noumea' => 'GMT+11:00 - Solomon Islands, Vanuatu, Magadan (SBT)',
'Pacific/Ponape' => 'GMT+11:00 - Solomon Islands, Vanuatu, Magadan (SBT)',
'Asia/Anadyr' => 'GMT+12:00 - Auckland, Fiji, Kamchatka (NZST)',
'Asia/Kamchatka' => 'GMT+12:00 - Auckland, Fiji, Kamchatka (NZST)',
'Pacific/Fiji' => 'GMT+12:00 - Auckland, Fiji, Kamchatka (NZST)',
'Pacific/Funafuti' => 'GMT+12:00 - Auckland, Fiji, Kamchatka (NZST)',
'Pacific/Kwajalein' => 'GMT+12:00 - Auckland, Fiji, Kamchatka (NZST)',
'Pacific/Majuro' => 'GMT+12:00 - Auckland, Fiji, Kamchatka (NZST)',
'Pacific/Nauru' => 'GMT+12:00 - Auckland, Fiji, Kamchatka (NZST)',
'Pacific/Norfolk' => 'GMT+12:00 - Auckland, Fiji, Kamchatka (NZST)',
'Pacific/Tarawa' => 'GMT+12:00 - Auckland, Fiji, Kamchatka (NZST)',
'Pacific/Wake' => 'GMT+12:00 - Auckland, Fiji, Kamchatka (NZST)',
'Pacific/Wallis' => 'GMT+12:00 - Auckland, Fiji, Kamchatka (NZST)',
'Pacific/Chatham' => 'GMT+12:45 - Chatham Islands (CHAST)',
'Antarctica/McMurdo' => 'GMT+13:00 - Phoenix Islands, Tokelau, Tonga, Samoa (PHOT)',
'Pacific/Apia' => 'GMT+13:00 - Phoenix Islands, Tokelau, Tonga, Samoa (PHOT)',
'Pacific/Auckland' => 'GMT+13:00 - Phoenix Islands, Tokelau, Tonga, Samoa (PHOT)',
'Pacific/Enderbury' => 'GMT+13:00 - Phoenix Islands, Tokelau, Tonga, Samoa (PHOT)',
'Pacific/Fakaofo' => 'GMT+13:00 - Phoenix Islands, Tokelau, Tonga, Samoa (PHOT)',
'Pacific/Tongatapu' => 'GMT+13:00 - Phoenix Islands, Tokelau, Tonga, Samoa (PHOT)',
'Pacific/Kiritimati' => 'GMT+14:00 - Kiritimati/Line Islands (LINT)'
};
// ============================================================
// QUERY & UPDATE
// ============================================================
String query = 'SELECT Id, ' + sourceField + ', ' + targetField
    + ' FROM ' + sObjectName
    + ' WHERE ' + sourceField + ' != NULL'
    + ' AND ' + targetField + ' = NULL'
    + ' LIMIT ' + recordLimit;
List<SObject> records = Database.query(query);
List<SObject> toUpdate = new List<SObject>();
Integer matchCount = 0;
for (SObject rec : records) {
    String sfTz = (String) rec.get(sourceField);
    if (String.isNotBlank(sfTz) && tzMap.containsKey(sfTz)) {
        rec.put(targetField, tzMap.get(sfTz));
        toUpdate.add(rec);
        matchCount++;
    } 
}
if (!toUpdate.isEmpty()) {
    Database.SaveResult[] results = Database.update(toUpdate, false);
    Integer successCount = 0, failCount = 0;
    for (Database.SaveResult sr : results) {
        if (sr.isSuccess()) { successCount++; }
        else {
            failCount++;
            for (Database.Error e : sr.getErrors())
                System.debug('Update failed: ' + sr.getId() + ' | ' + e.getMessage());
        }
    }
    System.debug('=== PART 2 COMPLETE === Updated: ' + successCount + ' | Failed: ' + failCount);
} else {
    System.debug('=== PART 2: NO RECORDS TO UPDATE ===');
}