[object Object]

What You Can Build

Apps that extend Freshdesk, Freshsales, Freshservice, and Freshchat. Three building blocks matter: frontend widgets that render inside the agent UI using Crayons components, serverless backend functions that run inside Freshworks Neo infrastructure (event-triggered or scheduled via the events and schedules configuration in manifest.json), and external system bridges that proxy outbound REST calls through the platform’s request templates so credentials never sit in the browser. Common placeholder locations include ticket_sidebar, contact_sidebar, deal_sidebar, new_ticket_background, and the global navigation. Knowing the placeholder catalog up front prevents the “we built it but there’s nowhere to put it” surprise late in development.

App Types

Private (your org only), Custom (white-labeled or partner-built for one customer), and Public Marketplace. Marketplace listings require the formal certification cycle — security review, privacy questionnaire, OAuth scope justification, and usually 2-4 review rounds before approval. Private apps install via direct upload of the .zip produced by fdk pack, take effect immediately, and skip review entirely. Custom apps are the right call when a single client needs functionality you don’t want listed publicly but also can’t ship as a one-off internal install.

Developer Kit

FDK (Freshworks Developer Kit) is the Node.js CLI that scaffolds apps, runs them locally, validates manifests, and packs them for submission. Install once with npm install -g @freshworks/fdk and verify against the latest published version (the platform rejects packs from outdated FDK versions). Local dev runs at http://localhost:10001/ and you append ?dev=true to your Freshworks portal URL to load the local bundle inside the live UI. Typical scaffold:

// app/scripts/app.js
app.initialized().then((client) => {
  client.events.on('app.activated', async () => {
    const ticket = await client.data.get('ticket');
    client.interface.trigger('showNotify', {
      type: 'success',
      message: `Loaded ticket ${ticket.ticket.id}`
    });
  });
});

The Crayons component library ships UI primitives (fw-button, fw-modal, fw-data-table) that match the host product’s theme, so apps inherit dark mode and accessibility automatically.

Pricing

Free, paid (per user/month or per transaction), and freemium. Revenue share with Freshworks on paid listings is currently 20% to the platform on net subscription revenue. Trial periods are configurable up to 30 days. Per-transaction pricing suits apps with usage-driven cost (an SMS-sending integration that bills per message). Per-seat suits productivity tools where every agent gets value. Avoid mixing models in one listing — the billing UX gets confusing for buyers.

Examples

E-signature integrations (DocuSign-style flows from a deal sidebar), CRM enrichment (Clearbit/ZoomInfo lookups firing on contact create), custom reports that pull data via the platform API and render charts in a dashboard placeholder, and helpdesk-vertical tools (a healthcare PHI redaction app, a logistics shipment-tracker that polls a carrier API and posts updates as private notes).

Common Failure Modes

Three traps catch first-time developers. First, hitting product API rate limits during local dev because the same key is shared across the whole tenant — use a dedicated sandbox account. Second, hard-coding production OAuth callback URLs into the manifest, which then fails review because Marketplace expects placeholders that resolve at install time. Third, ignoring the 256 KB request/response payload limit on serverless functions, which will silently truncate large CRM exports.

What to do this week

Install FDK, run fdk create against the Freshdesk template, and ship a hello-world app that reads the current ticket and renders a Crayons modal. Submitting to the Marketplace can wait — having a working private app teaches you 80% of what certification will ask about.

[object Object]
Share