npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@belmontdigitalmarketing/n8n-nodes-smartcsrpro

v1.2.0

Published

n8n community node to create tickets and upsert contacts in SmartCSRPro via the webhook API

Downloads

248

Readme

n8n-nodes-smartcsrpro

An n8n community node that integrates with SmartCSRPro via its Webhook API. It can create support tickets and upsert contacts from any n8n workflow — connect it to email triggers, form submissions, Slack messages, CRM events, or any other data source.

Table of Contents

Installation

Community Node (Recommended)

  1. In your n8n instance, go to Settings > Community Nodes
  2. Select Install
  3. Enter n8n-nodes-smartcsrpro
  4. Agree to the risks and click Install

Manual Installation

For self-hosted n8n instances:

  1. Navigate to your n8n custom nodes directory:

    cd ~/.n8n/custom
    mkdir -p node_modules/n8n-nodes-smartcsrpro
  2. Copy the following files into node_modules/n8n-nodes-smartcsrpro/:

    • package.json
    • dist/ folder (entire directory)
  3. Restart n8n:

    # Docker
    docker restart <n8n-container-name>
    
    # Docker Compose
    docker-compose restart n8n
    
    # PM2
    pm2 restart n8n
    
    # systemd
    sudo systemctl restart n8n

Manual Installation (Docker)

If running n8n in Docker, you can mount the node into the container. Place the node files at a path on the host and mount it:

docker run -it --rm \
  -v ~/.n8n:/home/node/.n8n \
  -v /path/to/n8n-nodes-smartcsrpro:/home/node/.n8n/custom/node_modules/n8n-nodes-smartcsrpro \
  n8nio/n8n

Prerequisites

  • An active SmartCSRPro account
  • A Webhook Secret — found in SmartCSRPro under Settings > Integrations > Webhook-to-Ticket
  • Your Tenant Slug — the subdomain identifier for your SmartCSRPro instance (e.g., unified-insurance)

Credentials

When setting up the SmartCSRPro credential in n8n, you will need:

| Field | Description | Example | |-------|-------------|---------| | Tenant Slug | Your tenant identifier (subdomain) | unified-insurance | | Webhook Secret | Secret key from SmartCSRPro Settings > Integrations > Webhook-to-Ticket | wh_abc123... | | Base URL | (Optional) Override if using a custom domain. Leave blank to use the default https://{tenantSlug}.insforms.cc | https://support.unified.insure |

The credential is automatically validated when you click Test — it calls the SmartCSRPro resources API to confirm the tenant slug and secret are correct.

Node Reference

Operations

The node exposes two operations, selected via the Operation dropdown:

| Operation | What it does | Endpoint | |-----------|--------------|----------| | Create Ticket | Creates a support ticket | POST /api/webhooks/inbound-ticket/{tenantSlug} | | Upsert Contact | Creates or updates a contact, matched by AMS applicant ID | POST /api/webhooks/contacts/{tenantSlug} |


Create Ticket

Creates a new support ticket in SmartCSRPro.

Main Fields

These fields are always visible:

| Field | Required | Description | |-------|----------|-------------| | Subject | Yes | The ticket title — becomes the main identifier on the SmartCSRPro dashboard | | Details | No | Markdown-formatted body rendered in the ticket's Details section (see Markdown in Details) | | Priority | No | Ticket priority: Low, Normal (default), High, or Urgent | | Assigned To | No | Dynamic dropdown of active team members. Assigns the ticket to the selected user. If unset, falls through to SmartCSRPro's assignment chain (rules, category routing, branch default, agency default) | | Due Date | No | Date picker for the ticket due date | | Client Email | No | Client's email address — used to match or auto-create a contact record in SmartCSRPro | | Tags | No | Dynamic multi-select dropdown of the tenant's predefined tags. You can also supply tag values via an expression | | Category | No | Dynamic dropdown of ticket categories. Sets the category explicitly. If left as the default and no Form is selected, the ticket falls under "Webhook to Ticket". If a Form is selected, an explicit Category here overrides the form's category |

Additional Fields

Click Add Field to access these optional fields:

| Field | Description | |-------|-------------| | Branch | Dynamic dropdown of active branches | | Client Name | Client's full name | | Client Phone | Client's phone number | | External ID | Your external reference ID for idempotency (see Idempotency) | | Form | Dynamic dropdown of active forms. When set, the ticket inherits the form's category and title. When omitted, the ticket is created as a formless "Webhook" ticket with category "Webhook to Ticket" (unless you set Category explicitly) | | Include Link to Workflow | Appends a "Generated via n8n: View Workflow" footer to the ticket Details (see Include Link to Workflow) | | Metadata | Free-form JSON object stored on the submission for debugging/reference |

Output

On success, the node outputs:

{
  "ok": true,
  "ticket_id": "0e2de815-dea7-4023-87db-154f20dc1bad",
  "ticket_number": "T-0E2DE815",
  "url": "https://unified-insurance.insforms.cc/portal/tickets/0e2de815-dea7-4023-87db-154f20dc1bad"
}

If the ticket was deduplicated via external_id, the response also includes "deduplicated": true.


Upsert Contact

Creates or updates a contact in SmartCSRPro, matched by AMS applicant ID (with email as a fallback match key). Re-running with the same applicant ID updates the existing contact rather than creating a duplicate.

Required Fields

| Field | Description | |-------|-------------| | Applicant ID | AMS applicant ID — the primary key used to match an existing contact within the tenant | | First Name | Contact's first name | | Last Name | Contact's last name |

Common Fields

These are always visible:

| Field | Description | |-------|-------------| | Email | Contact's primary email — lowercased and deduped server-side. Also used as a fallback match key when the applicant ID doesn't resolve | | Cell Phone | Contact's primary cell phone — deduped server-side | | Assigned AMS Username | Preferred assignee — matched against users.amsUsername on the SmartFlows side | | Assigned AMS Agent Full Name | Fallback assignee — case-insensitive "First Last" match against users. Used when Assigned AMS Username doesn't resolve |

Additional Fields

| Field | Description | |-------|-------------| | Account Name | Account or company name associated with the contact | | Address Line 1 | Street address | | Address Line 2 | Apartment, suite, or unit (accepted by the webhook but not currently persisted server-side) | | Applicant Type | Applicant type from the AMS (e.g. Personal, Commercial) | | City | City portion of the address | | CRM ID | External CRM identifier stored as-is on the contact record | | Customer Since | Customer-since date or label as supplied by the AMS | | Include Link to Workflow | Adds the workflow URL to this node's output as workflowLink (for downstream Slack messages). Does not write to the contact record | | Lead Source | Lead source label (e.g. Referral, Website) | | Lead Status | Lead status label (e.g. New, Quoted, Won) | | State | State or province portion of the address | | ZIP | Postal code portion of the address |

Co-Applicant

An optional collapsible section. When any field is filled, a coApplicant object is sent. The co-applicant's email and cell phone are also folded into the primary contact's emails[] / phones[] for matching.

| Field | Description | |-------|-------------| | First Name | Co-applicant's first name | | Last Name | Co-applicant's last name | | Email | Co-applicant's email | | Cell Phone | Co-applicant's cell phone | | Relationship | Relationship to the primary applicant (e.g. Spouse, Parent) |

Output

The node outputs the API response for the upserted contact. If Include Link to Workflow is enabled, a workflowLink field is added to the output.

Dynamic Dropdowns

Several Create Ticket fields use dynamic dropdowns that pull live data from your SmartCSRPro instance:

  • Assigned To — Lists all active team members (displays name + email)
  • Category — Lists the tenant's ticket categories
  • Form — Lists all active forms (displays form title + category)
  • Branch — Lists all active branches
  • Tags — Lists the tenant's predefined tags

These dropdowns refresh each time you open them, so they always reflect the current state of your SmartCSRPro configuration.

You can also use n8n expressions to set these fields dynamically from upstream node data.

Include Link to Workflow

Both operations offer an opt-in Include Link to Workflow toggle (default off) under Additional Fields:

  • Create Ticket — appends a *Generated via n8n:* [View Workflow](...) footer to the ticket Details.
  • Upsert Contact — adds the workflow URL to the node's output as workflowLink (so a downstream node, e.g. Slack, can link back). It does not write to the contact record.

Usage Examples

Minimal Ticket

Just set the Subject field:

Subject: Weekly reminder: Check UIG for agent notes

This creates a ticket with Form = "Webhook", Category = "Webhook to Ticket".

Full Ticket from Upstream Data

Connect the SmartCSRPro node after a trigger (e.g., a webhook, email, or form submission) and map fields using expressions:

  • Subject: ={{ $json.subject }}
  • Details: ={{ $json.body }}
  • Priority: high
  • Assigned To: Select from dropdown or use ={{ $json.agent_email }}
  • Category: Select from dropdown (e.g. Claims) or use ={{ $json.category }}
  • Client Email: ={{ $json.customer_email }}
  • External ID: ={{ $json.id }} (prevents duplicate tickets if the workflow runs again)

Upsert a Contact

  • Applicant ID: ={{ $json.applicantId }}
  • First Name: ={{ $json.firstName }}
  • Last Name: ={{ $json.lastName }}
  • Email: ={{ $json.email }}
  • Cell Phone: ={{ $json.phone }}

Re-running with the same Applicant ID updates the existing contact instead of creating a duplicate.

Idempotency / Deduplication

For Create Ticket, set the External ID field to enable deduplication. If you send the same external_id value twice, SmartCSRPro returns the existing ticket instead of creating a duplicate. This is useful for:

  • Webhook retries
  • Workflows that may re-process the same data
  • Ensuring exactly-once ticket creation

Upsert Contact is inherently idempotent — it matches on the AMS applicant ID and updates in place.

Markdown in Details

The Details field supports Markdown formatting:

**Client Information**
Name: Jane Doe
Phone: +1 555 123 4567

**Request**
- 2024 Honda Civic
- VIN 1HGCM82633A123456

[View policy](https://example.com/policy/123)

Supported syntax:

  • # ## ### headings
  • **bold** and *italic*
  • - bullet lists
  • [link text](url)
  • Bare URLs (auto-linked)

HTML tags are not supported and will render as literal text.

Compatibility

  • n8n version: 0.5.0 and above
  • Node.js: 18.x or later

License

MIT