Skip to main content
Freshdesk is a cloud-based customer support platform from Freshworks. It lets teams manage tickets across email, chat, phone, and social channels, track SLAs, and coordinate work between agents and groups. This connector extracts your Freshdesk help desk data so you can analyze ticket volume, agent performance, response times, and customer relationships.

Configuring Freshdesk as a Source

In the Sources tab, click on the “Add source” button located on the top right of your screen. Then, select the Freshdesk option from the list of connectors. Click Next and you’ll be prompted to add your access.

1. Add account access

You’ll need your Freshdesk subdomain and API key to authenticate. Freshdesk uses HTTP Basic authentication with the API key as the username.

Obtaining Your API Key

1

Log in to Freshdesk

Sign in to your Freshdesk account at https://{your-domain}.freshdesk.com.
2

Open your profile

Click your profile picture in the top-right corner and select Profile settings.
3

Copy the API key

On the right side of the profile page, click View API Key and copy the value.
Store your API key securely. Treat it like a password and do not share it publicly.

Configuration Fields

The following configurations are available:
  • Freshdesk domain: Your Freshdesk subdomain. For an account hosted at https://acme.freshdesk.com, this value is acme.
  • API key: The API key copied from your Freshdesk profile page.
  • Start date: The earliest date from which records will be synced. This controls the initial window for the tickets, contacts, and companies streams.
Once you’re done, click Next.

2. Select streams

Choose which data streams you want to sync. For faster extractions, select only the streams that are relevant to your analysis.
Tip: The stream can be found more easily by typing its name.
Select the streams and click Next.

3. Configure data streams

Customize how you want your data to appear in your catalog. Select the desired layer where the data will be placed, a folder to organize it inside the layer, a name for each table, and the type of sync.
  • Layer: choose between the existing layers on your catalog. This is where you will find your new extracted tables as the extraction runs successfully.
  • Folder: a folder can be created inside the selected layer to group all tables being created from this new data source.
  • Table name: we suggest a name, but feel free to customize it. You have the option to add a prefix to all tables at once and make this process faster.
  • Sync Type: you can choose between INCREMENTAL and FULL_TABLE.
    • Incremental: every time the extraction happens, we’ll get only the new data, which is good if you want to keep every record ever fetched.
    • Full table: every time the extraction happens, we’ll get the current state of the data, which is good if you don’t want to have deleted data in your catalog.
Once you are done configuring, click Next.

4. Configure data source

Describe your data source for easy identification within your organization, not exceeding 140 characters. To define your Trigger, consider how often you want data to be extracted from this source. Ticket data typically benefits from hourly or daily refreshes depending on your support volume. Optionally, you can determine when to execute an Additional Full Sync. This complements incremental extractions and ensures your data is fully synchronized every once in a while. Once you are ready, click Next to finalize the setup.

5. Check your new source

You can view your new source on the Sources page. If needed, manually trigger the source extraction by clicking on the arrow button. Once executed, your data will appear in your Catalog.
For you to be able to see it on your Catalog, you need at least one successful source run.

Streams and Fields

Below you’ll find all available data streams from Freshdesk and their corresponding fields:
Stream containing all support tickets, the central fact table for help desk analytics. Supports incremental sync based on the updated_at field. The stream automatically includes ticket stats (response and resolution timestamps) via the include=stats parameter for SLA analysis.
FieldTypeDescription
idIntegerUnique ticket ID
subjectStringTicket subject
description_textStringPlain-text description
typeStringTicket type (e.g., Question, Incident, Problem, Feature Request)
statusIntegerStatus code: 2=Open, 3=Pending, 4=Resolved, 5=Closed
priorityIntegerPriority: 1=Low, 2=Medium, 3=High, 4=Urgent
sourceIntegerSource channel (email, portal, phone, chat, etc.)
spamBooleanWhether the ticket is marked as spam
requester_idIntegerContact who created the ticket
responder_idIntegerAgent assigned to the ticket
company_idIntegerAssociated company
group_idIntegerAssigned agent group
product_idIntegerProduct associated with the ticket
email_config_idIntegerEmail mailbox used
fr_escalatedBooleanWhether first response SLA was breached
is_escalatedBooleanWhether resolution SLA was breached
fr_due_byDateTimeFirst response due-by timestamp
due_byDateTimeResolution due-by timestamp
nr_due_byDateTimeNext response due-by timestamp
nr_escalatedBooleanWhether next response SLA was breached
tagsArrayTicket tags
cc_emailsArrayCC emails on the ticket
fwd_emailsArrayForwarded emails
reply_cc_emailsArrayReply CC emails
to_emailsArrayTo emails on the ticket
due_by_in_hoursNumberDue-by in hours
sentiment_scoreNumberLatest sentiment score
initial_sentiment_scoreNumberInitial sentiment score
custom_fieldsObjectAccount-specific custom fields
stats.agent_responded_atDateTimeLast agent response timestamp
stats.requester_responded_atDateTimeLast requester response timestamp
stats.first_responded_atDateTimeFirst agent response timestamp
stats.status_updated_atDateTimeLast status change timestamp
stats.reopened_atDateTimeReopen timestamp
stats.resolved_atDateTimeResolution timestamp
stats.closed_atDateTimeClosure timestamp
stats.pending_sinceDateTimePending-since timestamp
created_atDateTimeCreation timestamp
updated_atDateTimeLast update timestamp
Stream containing ticket replies and private notes, fetched per ticket from the /tickets/{ticket_id}/conversations endpoint. Use this stream to analyze response times, interaction counts, and the full conversation timeline for each ticket.
FieldTypeDescription
idIntegerUnique conversation ID
ticket_idIntegerParent ticket ID
user_idIntegerAuthor (agent or contact) user ID
from_emailStringSender email
to_emailsArrayTo email addresses
cc_emailsArrayCC email addresses
bcc_emailsArrayBCC email addresses
body_textStringPlain-text message body
incomingBooleanWhether the message is incoming (from customer)
privateBooleanWhether this is a private note (agent-only)
sourceIntegerSource channel for the conversation
support_emailStringSupport email address used
categoryIntegerConversation category
thread_idIntegerThread ID for threaded conversations
thread_message_idIntegerThread message ID
last_edited_atDateTimeLast edit timestamp
last_edited_user_idIntegerUser who last edited
attachmentsArrayAttachment objects (id, name, content_type, size, attachment_url, timestamps)
created_atDateTimeCreation timestamp
updated_atDateTimeLast update timestamp
Stream containing all customers who have submitted tickets or been added to the help desk. Supports incremental sync based on the updated_at field.
FieldTypeDescription
idIntegerUnique contact ID
nameStringContact name
emailStringPrimary email
phoneStringPhone number
mobileStringMobile number
job_titleStringJob title
addressStringAddress
descriptionStringContact description
languageStringPreferred language
time_zoneStringTime zone
twitter_idStringTwitter handle
facebook_idStringFacebook ID
unique_external_idStringExternal ID from integrated systems
activeBooleanWhether the contact is verified/active
blockedBooleanWhether the contact is blocked
blocked_atDateTimeBlock timestamp
deletedBooleanWhether the contact is soft-deleted
company_idIntegerPrimary company association
view_all_ticketsBooleanWhether contact sees all company tickets
tagsArrayContact tags
other_emailsArrayAdditional emails
other_phone_numbersArrayAdditional phone numbers
other_companiesArraySecondary company associations (company_id, view_all_tickets)
custom_fieldsObjectAccount-specific custom fields
created_atDateTimeCreation timestamp
updated_atDateTimeLast update timestamp
Stream containing organizations that group contacts, commonly used for B2B support. Supports incremental sync based on the updated_at field.
FieldTypeDescription
idIntegerUnique company ID
nameStringCompany name
descriptionStringCompany description
noteStringInternal note
domainsArrayEmail domains associated with the company
health_scoreStringCustomer health score
account_tierStringAccount tier (e.g., Premium, Basic)
renewal_dateDateTimeContract renewal date
industryStringIndustry
custom_fieldsObjectAccount-specific custom fields
created_atDateTimeCreation timestamp
updated_atDateTimeLast update timestamp
Stream containing all support agents with their roles, groups, and skills. Extracted as a full-table sync.
FieldTypeDescription
idIntegerUnique agent ID
availableBooleanWhether the agent is currently available
available_sinceDateTimeTimestamp since current availability state
occasionalBooleanWhether the agent is occasional (non-full-time)
signatureStringHTML signature
ticket_scopeInteger1=Global, 2=Group, 3=Restricted access
typeStringAgent type (support_agent, field_agent, collaborator)
focus_modeBooleanWhether focus mode is enabled
deactivatedBooleanWhether the agent has been deactivated
last_active_atDateTimeLast active timestamp
group_idsArrayGroups the agent belongs to
role_idsArrayRoles assigned to the agent
skill_idsArraySkills assigned to the agent
contact.activeBooleanWhether the agent’s user record is active
contact.emailStringAgent email
contact.job_titleStringAgent job title
contact.languageStringPreferred language
contact.last_login_atDateTimeLast login timestamp
contact.mobileStringMobile number
contact.nameStringAgent name
contact.phoneStringPhone number
contact.time_zoneStringTime zone
contact.created_atDateTimeUser record creation timestamp
contact.updated_atDateTimeUser record last update timestamp
created_atDateTimeAgent record creation timestamp
updated_atDateTimeAgent record last update timestamp

Data Model

The following diagram illustrates the relationships between the core data streams in Freshdesk. The arrows indicate the join keys that link the different entities.

Implementation Notes

Data Sync Considerations

  • Incremental sync: Tickets, contacts, and companies support incremental sync based on updated_at. Agents and conversations are extracted as full-table syncs.
  • Ticket stats: The tickets stream automatically requests the stats block from the Freshdesk API, giving you response and resolution timestamps without a second API call.
  • Conversations: Conversations are nested under tickets. Any ticket included in a sync will have its conversations re-fetched, so keep this in mind when tuning the start date for high-volume accounts.

API Limits & Performance

  • Page cap: The Freshdesk list endpoints cap at 300 pages of 100 records (30,000 records per filter window). For accounts exceeding this, use a recent start date and increase the sync frequency so each incremental window stays within the cap.
  • Rate limits: Freshdesk enforces per-minute rate limits that vary by plan. The connector retries on 429 responses using the Retry-After header.
  • Timestamps: All timestamps are returned in UTC (ISO 8601).

Skills for agents

Download Freshdesk skills file

Freshdesk connector documentation as plain markdown, for use in AI agent contexts.