> Source: https://builder-docs.ema.ai/agent-qa/imports
> Title: Imports, Genesys, and Agent Mapping

# Imports, Genesys, and Agent Mapping

The **Imports** tab is where conversations enter Agent QA. This section covers every way to bring calls in -- pulling them automatically from Genesys Cloud, uploading a batch of files yourself, or re-processing interactions you already imported -- and the agent-mapping configuration all three depend on.

> [INFO]
> Imports covers _bulk_ ingestion from the builder interface. To push interactions one at a time from your own systems, use the [Audio Ingestion API](/legacy-docs/agent-qa/api-audio-ingestion) or the [Transcript Ingestion API](/legacy-docs/agent-qa/api-transcript-ingestion) instead.

## 3.1 How Imports Work

The tab has two sub-tabs:

Sub-tab

What It Does

**Imports**

Lists every import job -- name, source, call window, status, progress, and last update. Click **New import** to start one.

**Agent Mapping**

Maps the agent identifier your source system uses to a known Ema employee. See Agent Mapping.

The list syncs on its own and shows how fresh it is -- "Synced a few seconds ago", or "Not synced yet" before the first sync. Click **Refresh** at any time to pull the latest status without waiting for the next sync.

### Import Types

Type

Description

**Genesys CCaaS**

Pull call recordings automatically from Genesys Cloud for a date range. See Running a Genesys Import.

**Bulk upload -- audio**

Upload a batch of recordings from your computer with a metadata CSV. See Bulk File Upload.

**Bulk upload -- transcripts**

Upload a batch of transcripts from your computer with a metadata CSV.

**Re-run**

Re-process interactions you already imported against your current rules. See Re-running Interactions.

Whichever route you use, the back half of the pipeline is the same: Ema attributes each conversation to an employee, hands the file to transcription, and evaluates it. Results appear in the [Audit tab](/legacy-docs/agent-qa/audit), which remains the source of truth for QA outcomes. The Imports tab tracks a file only up to the point it is handed off for processing.

> [INFO]
> Single interactions pushed through the ingestion APIs also appear in the job list, labelled **Single file upload**. They are shown for visibility -- there is nothing to configure.

## 3.2 Connecting Genesys Cloud

Genesys Cloud is the first Contact-Center-as-a-Service (CCaaS) provider Agent QA connects to. Connect it once, then start imports whenever you need them.

### What You Need From Genesys

Ema authenticates with the OAuth2 **Client Credentials** grant. In your Genesys org, create an OAuth client of type _Client Credentials Grant_ and note its credentials.

Value

Detail

**Client ID**

From the OAuth client you created in Genesys.

**Client secret**

From the same OAuth client. Treat it as a credential -- Ema stores it encrypted.

**Region**

The Genesys region your org runs in. See Supported Genesys Regions.

> [INFO]
> There is no browser redirect, consent screen, or callback URL in this flow, and no refresh token to manage. Ema requests a fresh access token with the stored credentials whenever it needs one. If you rotate the secret in Genesys, update it in Ema or imports will start failing to authenticate.

### Supported Genesys Regions

Your region determines which Genesys hosts Ema talks to. Pick the one matching your Genesys org.

Region

Code

Genesys Domain

Americas (US East)

`us-east-1`

`mypurecloud.com`

Americas (US East 2)

`us-east-2`

`use2.us-gov-pure.cloud`

Americas (US West 2)

`us-west-2`

`usw2.pure.cloud`

Americas (Canada Central)

`ca-central-1`

`cac1.pure.cloud`

Americas (Sao Paulo)

`sa-east-1`

`sae1.pure.cloud`

EMEA (Ireland)

`eu-west-1`

`mypurecloud.ie`

EMEA (London)

`eu-west-2`

`euw2.pure.cloud`

EMEA (Frankfurt)

`eu-central-1`

`mypurecloud.de`

EMEA (Zurich)

`eu-central-2`

`euc2.pure.cloud`

EMEA (UAE)

`me-central-1`

`mec1.pure.cloud`

Asia Pacific (Mumbai)

`ap-south-1`

`aps1.pure.cloud`

Asia Pacific (Tokyo)

`ap-northeast-1`

`mypurecloud.jp`

Asia Pacific (Seoul)

`ap-northeast-2`

`apne2.pure.cloud`

Asia Pacific (Osaka)

`ap-northeast-3`

`apne3.pure.cloud`

Asia Pacific (Sydney)

`ap-southeast-2`

`mypurecloud.com.au`

### Verifying the Connection

Open **New import** and choose Genesys. If the connection is healthy, the window picker appears. If it is not, the drawer says so instead:

Message

What It Means

**Connect this source to start an import**

No active connection exists for your organisation. Connect Genesys from the Integrations page, then come back.

**Couldn't check your connection**

Ema could not reach the connector to confirm its state. Retry; if it persists, contact support.

## 3.3 Running a Genesys Import

An import pulls every voice recording in a time window and queues it for evaluation.

> [INFO]
> Recordings pulled from Genesys must be in **WAV** format. Support for additional CCaaS providers, and for other file formats over this path, is on the roadmap. To bring in other formats today, use Bulk File Upload.

### Window Rules

All times are in **UTC**, including the presets.

Rule

Detail

**Maximum window**

24 hours per import. To cover a longer period, submit several imports.

**Minimum age**

The end of the window must be at least 1 hour in the past. Recordings for very recent calls may not be available from Genesys yet.

**Oldest window**

Calls up to 1 year old.

### Starting an Import

1.  Go to **Imports** and click **New import**.
2.  Choose **Genesys CCaaS**.
3.  Pick a call window -- use a preset (**Last 24 hours**, **Today (UTC)**, **Yesterday (UTC)**) or set a **Custom** range.
4.  Optionally give the import a name, such as "May 28 -- overnight shift". Names make the job list readable later and can be edited at any time.
5.  Under **Advanced Settings**, optionally set a language. Leave it on **Auto-detect** unless every call in the window is in the same language -- setting it explicitly transcribes all of them in that language rather than detecting per call.
6.  Click **Submit**.

The job is queued immediately and the drawer closes. You do not need to wait for it, and you can start other work or queue further imports right away.

> [TIP]
> Submitting is retry-safe. If the request times out or you click twice, Ema returns the job it already created rather than starting a duplicate.

### What Happens Next

1.  **Queued.** The job waits for a free processing slot.
2.  **Listing.** Ema pages through Genesys and creates one tracked row per matching call. Rows that cannot be ingested end here -- a call with no agent participant, or a transferred call involving more than one agent.
3.  **Agent mapping.** Each call carries an agent identifier from Genesys. Ema matches it to an employee using your agent-mapping configuration.
4.  **Your input, only if needed.** If some agents are not recognised, the job pauses. See Resolving a Paused Import.
5.  **Download and hand-off.** Ema fetches each recording into Ema storage and hands it to transcription at a paced rate, so one large import cannot crowd out other work.
6.  **Triggered.** Every recording has been handed off. QA scores appear in the Audit tab as evaluation completes.

## 3.4 Bulk File Upload

Use bulk upload when your calls are not in a connected CCaaS provider, or when you simply have a folder of files to evaluate. You supply the recordings or transcripts plus a CSV describing them.

### Limits and Formats

Requirement

Detail

**Files per import**

Up to 500. A selection that would take you over the cap is rejected in full, not partially accepted.

**Maximum file size**

25 MB per file

**Audio formats**

MP3, WAV, Opus, OGG, or WebM

**Transcript formats**

JSON, XML, or HTML

**Metadata**

One CSV, one row per file

> [INFO]
> An import is either audio or transcripts, not both. Choose the type when you start the wizard -- a transcript in an audio import (or the reverse) is rejected at the check step.

### The Upload Wizard

1.  **Upload files.** Select your recordings or transcripts and the metadata CSV. Files upload as you go; you can keep adding until you hit the cap.
2.  **Map columns.** Match each CSV header to an Ema field. Headers that already match a field name are mapped for you. Any column you leave unmapped is preserved as extra metadata on the interaction rather than discarded.
3.  **Check.** Ema validates every row against the files you uploaded and highlights problems inline. See Fixing Upload Errors.
4.  **Launch.** Submit the import. It joins the same queue as a Genesys import and behaves identically from that point on.

### Metadata CSV Columns

Column

Required

Detail

**Filename**

Yes

The uploaded file's name, for example `call-12345.mp3`. The extension is stripped when matching to the file.

**Agent ID**

Yes

The agent identifier from your source system. This is what agent mapping resolves.

**Agent email**

Yes

SSO email. Used for per-agent permissioning.

**Call timestamp**

Yes

ISO 8601 in UTC, for example `2026-05-27T14:32:00Z`. A value with no timezone is read as UTC.

**Channels**

Audio only

`1` for mono, `2` for stereo. There is no default -- an empty cell is an error.

**Channel map**

Stereo only

Required when Channels is `2`. JSON, for example `{"0":"Agent","1":"Customer"}`.

**Language**

No

Transcribe this interaction in a specific language instead of auto-detecting.

**Case ID**

No

Your ticket or case reference.

**Agent tenure (days)**

No

How long the agent had been in the role, used for tenure-based analysis.

**Example:**

```
filename,agent_id,agent_email,call_timestamp,channels,channel_map,case_id
call-12345.mp3,A-4471,sarah.jones@example.com,2026-05-27T14:32:00Z,2,"{""0"":""Agent"",""1"":""Customer""}",CS-88213
call-12346.mp3,A-4472,mike.chen@example.com,2026-05-27T15:04:11Z,1,,CS-88219
```

### Fixing Upload Errors

The check step reports two kinds of problem, and nothing is committed while any remain.

Problem

What It Means

Fix

**File not found**

The CSV names a file that was not uploaded, or whose upload did not finish.

Upload the missing file, or skip the row.

**Wrong file type**

The file does not match the import type -- a transcript in an audio import, or the reverse.

Remove the file, or start the right kind of import.

**Missing required value**

A required column is empty for that row.

Fill the cell in the check step.

**Wrong format**

A value cannot be read as expected -- a non-numeric channel count, an unparseable timestamp.

Correct the value in the check step.

> [TIP]
> Skipping a row excludes it from the import entirely -- it is not validated, not uploaded, and not evaluated. Use it when a file is genuinely unavailable and you would rather proceed without it than hold up the whole batch.

## 3.5 Re-running Interactions

Re-run re-processes interactions you have already imported against your current rules. Use it after changing QA parameters, or to retry interactions that failed.

1.  Click **New import**, then **Re-run interactions**.
2.  Choose which interactions: **All interactions in the range**, **Failed interactions only**, or **Interactions with incorporated feedback**.
3.  Set the ingestion window (UTC). The default is the last 7 days.
4.  Submit.

> [WARNING]
> **Re-running is billable.** Each interaction is processed end to end, exactly like a new evaluation.

> [DANGER]
> **Re-running deletes reviewer feedback.** Any feedback on the selected interactions is removed -- both approved and pending. If that feedback has not yet been incorporated through continuous learning, it cannot be recovered.

### When an Interaction Cannot Be Re-run

Re-run can also be started per row from the Audit tab. Where the action is unavailable, hovering it explains why:

Reason

What To Do

**Evaluation in progress**

Wait for the current evaluation to finish, then retry.

**Already queued for processing**

A re-run is already pending for this interaction.

**Past its retention period**

The raw call file has been deleted under your data-retention settings, so there is nothing left to re-process. See [Setting Up Agent QA](/legacy-docs/agent-qa/setup) for retention configuration.

**Re-run limit reached**

The last 3 re-runs of this call failed. Investigate the underlying failure rather than retrying again.

## 3.6 Job Statuses and Progress

### Job Statuses

Status

Meaning

**Draft**

A bulk upload you started but have not submitted. Click **Resume** to continue where you left off.

**Queued**

Submitted, waiting for a free processing slot.

**Listing interactions**

Ema is enumerating matching calls from the source. Rows appear as they are found.

**Pending agent mapping**

Calls have been listed and are being matched to employees.

**Awaiting user input**

One or more agents could not be matched. The job is waiting on you.

**Ready to run**

Every file has a decided outcome; waiting for a free processing slot.

**Processing**

Recordings are being fetched and handed off for transcription and evaluation.

**Triggered**

Success. Every file has been handed off. QA results appear in the Audit tab.

**No interactions found**

The source had nothing matching your window. Nothing to do.

**Skipped**

Every file in the job was skipped.

**Expired**

The job sat awaiting your input for more than 24 hours. Start a new import for the same window.

**Failed**

The job could not complete. Contact support if it recurs for the same window.

> [INFO]
> **Triggered means the import succeeded, not that grading is finished.** The Imports tab's job is to get conversations into processing. Transcription and evaluation continue afterwards, and their outcome is shown in the Audit tab.

### Progress Counters

Each job shows how its files are distributed. The four counts always add up to the total:

Counter

What It Counts

**Succeeded**

Files that reached a final outcome without failing -- handed off, skipped by you, or a recording that was never available.

**Failed**

Files that ended in an error.

**In progress**

Files still moving through the pipeline.

**Awaiting**

Files waiting on an agent mapping from you.

### Why a Job Sits in Queued

Ema limits how many imports run at once -- up to 10 per AI Employee and 40 per organisation -- and rotates work fairly across AI Employees and customers. A large import is interleaved with everything else rather than monopolising the system, so a queued job is normal during busy periods and needs no action. Jobs waiting purely on capacity never expire.

## 3.7 Agent Mapping

Every conversation must be attributed to a specific employee before it can be evaluated. Agent mapping is the link between the agent identifier your source system uses -- a Genesys user ID, or the Agent ID column in your CSV -- and a known Ema employee.

### The Identity Schema

Open **Schema settings** (the gear icon on the Agent Mapping tab) to define what an agent record looks like for your organisation.

Setting

Detail

**Primary identifier label**

What you call your own agent ID, for example "BMS ID". This renames the field everywhere it appears; it does not change any data.

**Custom attributes**

Extra fields to capture per agent, such as Team, Country, or Tenure. Each has a type of Text, Number, or Date. The type is fixed once created.

> [WARNING]
> Define the schema before your first import. Until it exists, agents cannot be mapped at all -- the resolve step will block and point you back here. Declaring your custom attributes early also means every later resolve form captures them inline, so records do not land half-filled.

> [INFO]
> Removing a custom attribute deletes its values from every existing mapping row. Ema tells you how many rows are affected before you save.

### What a Mapping Row Contains

Field

Required

Detail

**Source ID**

Yes

The agent identifier from your source system, for example a Genesys user ID.

**UPN**

Yes

The employee's SSO email. This is what drives per-agent permissions.

**Primary identifier**

Yes

Your own agent ID, under whatever label you set in the schema.

**Agent name**

No

Display name.

**Effective from**

Yes

Start of the validity window, in UTC. Blank means today.

**Effective to**

No

End of the validity window, in UTC. Blank means open-ended.

**Custom attributes**

Varies

Whatever you defined in the schema.

> [TIP]
> Mappings are time-aware, which is what makes historical imports correct. If a source ID was reassigned to a different person in March, give the first mapping an **Effective to** of March and the second an **Effective from** of March. Calls from January are then attributed to the right employee even though you import them today.

### Uploading Mappings in Bulk

Click **Upload mapping** for a four-step wizard.

1.  **Choose CSV.** Up to 5 MB and 10,000 rows.
2.  **Map columns.** Match your headers to Ema's fields. Ema suggests obvious matches; you can override any of them.
3.  **Pick mode.** See the table below.
4.  **Review.** Ema validates the file and shows exactly what would change before anything is written.

Mode

Effect

**Additive**

Adds new rows and updates matching ones. Rows not in the CSV are left alone.

**Replace all**

Clears the existing mappings and inserts the CSV from scratch. Any row not in the file is removed.

> [DANGER]
> **Replace all removes mappings that are not in your file.** Always read the review step's counts before confirming -- it tells you how many rows would be added, updated, removed, and left unchanged, with samples of each.

### Upload Validation

Errors block the upload. Warnings can be acknowledged and applied.

Issue

Severity

Meaning

**Required value missing**

Error

Source ID, UPN, or your primary identifier is empty.

**Invalid email**

Error

The UPN is not email-shaped.

**Wrong type**

Error

A value does not match its attribute type -- text in a Number field, or a date that is not `YYYY-MM-DD`.

**Dates inverted**

Error

Effective to is earlier than Effective from.

**Overlapping window**

Error

Another row -- in this CSV or already saved -- covers the same source ID over an overlapping period.

**Reassignment**

Warning

This source ID is already mapped to a different person over an overlapping window. Acknowledge it to overwrite the existing mapping.

**Duplicate column**

Error

Two CSV headers were mapped to the same Ema field.

### Downloading and Retiring Mappings

Action

Detail

**Download mapping**

Exports every mapping as CSV, ignoring whatever search filter is active. The usual way to bulk-edit is download, edit, re-upload.

**Search**

Matches across source ID, your primary identifier, and agent name.

**Retire**

Closes the mapping's window by setting Effective to to today. The row stays visible, struck through, and still applies to imports of calls from within its window.

> [TIP]
> Retire rather than delete when someone leaves. Deleting removes the link that past evaluations were attributed through; retiring keeps history intact and simply stops the mapping applying to new calls.

## 3.8 Resolving a Paused Import

When an import finds agents it does not recognise, it pauses at **Awaiting user input** and shows how many agents need attention. Nothing is lost while it waits -- the calls that did match are already on their way.

### Using Resolve Agents

Click **Resolve agents** on the job. You get one card per unrecognised agent, showing the source ID and the range of call times seen for it.

1.  Enter the **UPN** -- the employee's SSO email -- and your primary identifier.
2.  Set the validity window. The hints under each date field tell you the earliest and latest conversation for that agent; the window must cover the whole range or those calls stay unresolved after you save.
3.  Fill in any custom attributes your schema defines.
4.  Click **Save & next** to move to the following agent.

Saving a mapping here also unsticks every _other_ paused import waiting on that same agent, not just the one in front of you.

> [INFO]
> If the source ID already maps to someone else over an overlapping window, Ema warns you and asks you to confirm. Confirming retires the existing mapping and replaces it with yours.

### Skipping and Resuming

Action

Effect

**Skip for now**

Sets the card aside for this session only. Nothing is submitted and nothing changes -- use **Undo skip** to bring it back.

**Skip rows on the job**

Permanently excludes those calls from the import. They are never evaluated. Once the last awaiting row is skipped or mapped, the job continues on its own.

**Resume**

Re-runs agent matching for the job so mappings you added elsewhere -- on the Agent Mapping tab, or by CSV upload -- get picked up.

> [WARNING]
> A job left awaiting input expires after **24 hours** and cannot be resumed. If that happens, add the missing mappings and submit a fresh import for the same window.

## 3.9 File Outcomes and Troubleshooting

Open a job to see every file and its outcome. Some outcomes are dead ends by design rather than errors -- they do not mean the import failed.

Outcome

What Happened

What To Do

**Awaiting user input**

The agent on this call is not mapped.

Use **Resolve agents**, or skip the row.

**Skipped**

You excluded this call from the import.

Nothing. Re-import the window if you skipped it by mistake.

**Multiple agents detected**

Two or more agents handled the conversation, usually a transfer. Agent QA does not currently split a call between agents.

Nothing today. Evaluate transferred calls through a separate upload if you need them scored.

**Recording not found**

Genesys has no recording for this conversation.

Check that recording was enabled for the queue at the time of the call.

**Recording not ready**

The recording exists but Genesys has not finished preparing it.

Re-import the window later.

**Recording archived**

The recording has been moved to archival storage in Genesys.

Restore it in Genesys, then re-import.

**Multiple recordings available**

The conversation has more than one recording and Ema cannot tell which to evaluate.

Upload the correct recording through bulk upload.

**Recording too large**

The audio exceeds the 25 MB limit.

Compress or split the recording and upload it manually.

**Expired**

The file waited more than 24 hours for an agent mapping.

Add the mapping, then re-import the window.

**Failed**

Ema could not fetch or hand off the file.

Re-import the window. Contact support if the same files fail again.

> [TIP]
> Use the search box inside a job to find a specific call by conversation ID, source agent ID, agent email, or your own agent ID, and the status filter to isolate everything that failed.

## 3.10 Permissions

Access to the Imports tab is controlled by `CAN_VIEW_IMPORTS`, held by the Builder, Manager, and Admin roles. Metrics Viewer and SelfMetrics Viewer cannot see or start imports. For the full matrix, see [Roles and Permissions](/legacy-docs/agent-qa/roles).
