The Customer Factor API and MCP server Let your AI agent schedule the route and send the bills.

The Customer Factor publishes no public API and no MCP server (checked 14 Nov 2026). Cotlet runs a hosted The Customer Factor MCP server with 24 tools that ChatGPT and Claude use in your own account. Invoices, reminders and messages to your crew wait for your OK.

  • Free 7-day trial, no card
  • Unofficial, not affiliated with The Customer Factor
The Customer Factor logo The Customer Factor Cloud Browser

24 tools Read and write

Contractor office work

What can your AI agent do in The Customer Factor? The office side of a route-based service business.

  • Set up a recurring service for a new customer

  • Mark the week's jobs completed

  • Invoice completed jobs with tax

  • Send payment reminders for unpaid invoices

  • Record one check against several invoices

  • Hold a customer for the off-season

No public API, no MCP

Does The Customer Factor have an MCP server or an API? The official The Customer Factor routes, checked 14 November 2026.

The Customer Factor publishes no public API: its website and Help Center document no developer API. No The Customer Factor MCP server and no official ChatGPT or Claude connector was verified.

  • The Customer Factor processes cards through its Square, Stripe and Worldpay integrations, inside its own payment window.
  • Recurring jobs repeat by week or by month, and months can be left out for a slow season.
  • A mobile app covers the calendar, invoices, payments and prospects in the field.
The Customer Factor by hand and Cotlet compared
What you need The Customer Factor aloneCotlet
Ask ChatGPT or Claude to do the work No API or MCP server Hosted MCP server
Recurring jobs, holds and completions By hand, customer by customer 24 tools, writes after your OK
Invoices, reminders and statements By hand, with bulk screens On request or on a schedule
Run from n8n or a script No public API REST, same key

Checked 14 Nov 2026. Sources: The Customer Factor website · The Customer Factor Help Center · Help: Scheduling a Non Recurring Job · Help: Adding New Prospect · Help: Prospect to Customer Conversion · Help: Adding Job Locations · Help: How to Schedule a Recurring Job · Help: Edit and Delete Recurring Jobs · Help: Putting a Job on Hold · Help: Mark a Job as Completed · Help: Job Types and Packages · Help: Job Checklists · Help: Creating Invoice · Help: Creating and Emailing an Invoice · Help: Invoice Deposits · Help: Paying Invoice · Help: Single Payment for Multiple Invoices · Help: Payment Reminder · Help: Print and Email Customer Statements · Help: How to Create a Big Proposal · Help: How to Add Tasks · Help: How to Edit Specific Notes · Help: Emails and Text Messages to Employees · Help: Estimate and Invoice Email Templates

Set up once

How does the The Customer Factor MCP server work? The The Customer Factor MCP server by Cotlet: your agent works in your own account.

  1. 1Sign in to The Customer Factor

    Once, in a browser we host for you.

  2. 2Connect your AI agent

    One address in its settings.

  3. 3Hand it the Friday billing

    It drafts the invoices, you approve the totals.

Your agent works in your own signed-in Cloud Browser. Invoices, reminders, statements and messages to your crew wait for your OK. Who can see your session

Any MCP client

How to connect The Customer Factor to your AI agent

  1. 1

    Sign in to The Customer Factor in a Cloud Browser. Open www.thecustomerfactor.com/login in your Cotlet Cloud Browser and log in with your own user.

  2. 2

    Add the Cotlet address. Enter https://cotlet.dev/mcp/v1 as the MCP server or connector URL in your agent.

  3. 3

    Let the agent in. Chat apps open a Cotlet sign-in page. Editors, n8n and scripts send an API key made in the console.

The Customer Factor runs on the shared address https://cotlet.dev/mcp/v1 next to every other app you enable, so a single connector is enough. Enabled The Customer Factor after connecting? Refresh the connector to see its 24 tools.

ChatGPT
Settings > Apps & Connectors > Create
MCP server URL: https://cotlet.dev/mcp/v1/connect
Authentication: OAuth
Claude
Settings > Connectors > Add custom connector
URL: https://cotlet.dev/mcp/v1/connect

Claude Code:
claude mcp add --transport http cotlet \
  https://cotlet.dev/mcp/v1 \
  --header "Authorization: Bearer $COTLET_API_KEY"
Cursor
// ~/.cursor/mcp.json
{
  "mcpServers": {
    "cotlet": {
      "url": "https://cotlet.dev/mcp/v1",
      "headers": { "Authorization": "Bearer ${env:COTLET_API_KEY}" }
    }
  }
}
Codex
# ~/.codex/config.toml
[mcp_servers.cotlet]
url = "https://cotlet.dev/mcp/v1"
bearer_token_env_var = "COTLET_API_KEY"
n8n
MCP Client Tool (inside an AI Agent)
Transport: HTTP Streamable
URL: https://cotlet.dev/mcp/v1
Auth: Bearer, <your key>
Tool: the_customer_factor_read
2 read, 22 write

All 24 The Customer Factor MCP tools

One tool per workflow in the The Customer Factor Help Center. Customer and invoice searches read at once; every tool that saves or sends asks first.

Customers and prospects5

Search first, then add residential or commercial customers, prospects and extra job locations.

  • find_customers Search customers and prospects, or open one customer profile. read

    Uses the global search at the top of the screen. Most other tools take a customer, so this is usually the first call. Nothing is changed, so it runs without asking.

    MCP callthe_customer_factor_read → find_customers

    REST endpointGET https://cotlet.dev/api/v1/the-customer-factor/customers/find

    Parameters

    Parameters: find_customers
    NameTypeDescription
    query string required string Last name, first name, address or phone number, as the global search takes them.
    profile boolean boolean Return the full profile of the best match: job locations, recurring jobs, currently scheduled jobs and notes.

    Example input

    {
      "query": "query"
    }

    Example response

    {
      "customers": [
        {
          "customer": "Example Homeowner",
          "type": "Residential",
          "address": "12 Oak Lane, Springfield",
          "phone": "+1 555 0100",
          "recurring_jobs": 1
        }
      ]
    }
  • add_customer Add a customer under Customers > Add, residential or commercial. writeAsks first

    Choose residential or commercial first, as the Help Center asks; it decides the billing and service details applied. Run find_customers first so the same household is not added twice. By default you confirm each call; you can switch that off for this tool.

    MCP callthe_customer_factor_write → add_customer

    REST endpointPOST https://cotlet.dev/api/v1/the-customer-factor/customers

    Parameters

    Parameters: add_customer
    NameTypeDescription
    type string required string `residential` or `commercial`.
    fields object required object Full name or company, address, phone, email and the other customer fields you want set.

    Example input

    {
      "type": "type",
      "fields": "fields"
    }

    Example response

    {
      "customer": "Example Homeowner",
      "type": "Residential",
      "address": "12 Oak Lane, Springfield",
      "saved": true
    }
  • add_prospect Add a lead as a residential or commercial prospect, without an estimate yet. writeAsks first

    The prospect gets its own profile, ready for a Big Proposal or an estimate. convert_prospect makes it a customer later. By default you confirm each call; you can switch that off for this tool.

    MCP callthe_customer_factor_write → add_prospect

    REST endpointPOST https://cotlet.dev/api/v1/the-customer-factor/prospects

    Parameters

    Parameters: add_prospect
    NameTypeDescription
    type string required string `residential` or `commercial`.
    fields object required object Full name, address and contact details.

    Example input

    {
      "type": "type",
      "fields": "fields"
    }

    Example response

    {
      "prospect": "Sample Office Park",
      "type": "Commercial",
      "saved": true
    }
  • convert_prospect Make a prospect a customer with the "Make 'em A Customer" button. writeAsks first

    Scheduling a job from an estimate with schedule_job converts the prospect automatically; this tool is for the manual case. By default you confirm each call; you can switch that off for this tool.

    MCP callthe_customer_factor_write → convert_prospect

    REST endpointPOST https://cotlet.dev/api/v1/the-customer-factor/prospect/convert

    Parameters

    Parameters: convert_prospect
    NameTypeDescription
    prospect string required string Prospect name, as find_customers returns it.

    Example input

    {
      "prospect": "prospect"
    }

    Example response

    {
      "customer": "Sample Office Park",
      "status": "customer"
    }
  • add_job_location Add another service address to a customer profile. writeAsks first

    For a rental home, a business address or a commercial customer with several sites. By default you confirm each call; you can switch that off for this tool.

    MCP callthe_customer_factor_write → add_job_location

    REST endpointPOST https://cotlet.dev/api/v1/the-customer-factor/job-locations

    Parameters

    Parameters: add_job_location
    NameTypeDescription
    customer string required string Customer name, address or phone, as find_customers returns it.
    type string string `residential` or `commercial`. Defaults to the customer's type.
    address object required object Address, address 2, city, state and postal code.
    bill_to boolean boolean Use this location as the Bill To address on invoices, work orders and estimates.
    bill_to_name string string A different Bill To name, if needed.

    Example input

    {
      "customer": "customer",
      "address": "address"
    }

    Example response

    {
      "customer": "Example Homeowner",
      "location": "48 Lake Road, Springfield",
      "type": "Residential",
      "bill_to": false,
      "saved": true
    }

Scheduling5

Single and recurring jobs, recurring changes that apply to future jobs only, holds and completions.

  • schedule_job Schedule a single job on a customer's Schedule Job sub-tab. writeAsks first

    Scheduling from a prospect's estimate converts the prospect to a customer, as the Help Center describes. By default you confirm each call; you can switch that off for this tool.

    MCP callthe_customer_factor_write → schedule_job

    REST endpointPOST https://cotlet.dev/api/v1/the-customer-factor/job/schedule

    Parameters

    Parameters: schedule_job
    NameTypeDescription
    customer string required string Customer name, address or phone, as find_customers returns it.
    date string required string ISO date.
    time string string Appointment time or range, and duration.
    job_type string required string Job type from manage_job_types.
    price number number Price in the "each" field.
    assigned_to string string Employee for the job.
    frequency_period string string Optional: how often the customer wants service, so The Customer Factor prompts you to reach out near the next date.
    create_invoice boolean boolean Use "Schedule & Create Invoice" instead of "Schedule".

    Example input

    {
      "customer": "customer",
      "date": "date",
      "job_type": "job type"
    }

    Example response

    {
      "customer": "Example Homeowner",
      "date": "2026-11-20",
      "time": "09:00-11:00",
      "job_type": "Window cleaning, exterior",
      "price": 180,
      "assigned_to": "Crew A",
      "scheduled": true
    }
  • schedule_recurring_job Schedule a job that repeats by week or by month, with months left out if needed. writeAsks first

    The job then appears under Recurring Job(s) on the customer profile and keeps going until it ends. By default you confirm each call; you can switch that off for this tool.

    MCP callthe_customer_factor_write → schedule_recurring_job

    REST endpointPOST https://cotlet.dev/api/v1/the-customer-factor/recurring-job/schedule

    Parameters

    Parameters: schedule_recurring_job
    NameTypeDescription
    customer string required string Customer name, address or phone, as find_customers returns it.
    first_date string required string ISO date of the first visit.
    job_type string required string Job type from manage_job_types.
    price number number Price per visit.
    assigned_to string string Employee for the job.
    period string required string A weekly period (every week, every other week) or a monthly one (first Monday of the month), as the recurring options offer.
    exclude_months array array Months with no service, for example a slow season.
    ends string string End date. Defaults to Never.

    Example input

    {
      "customer": "customer",
      "first_date": "first date",
      "job_type": "job type",
      "period": "period"
    }

    Example response

    {
      "customer": "Example Homeowner",
      "job_type": "Window cleaning, exterior",
      "period": "every 4 weeks",
      "exclude_months": [
        "December",
        "January",
        "February"
      ],
      "ends": "Never",
      "scheduled": true
    }
  • update_recurring_job Change the price, period or services of a recurring job, or delete it. writeAsks first

    A change applies to every future job of that customer. Deleting removes only future jobs; past jobs stay. By default you confirm each call; you can switch that off for this tool.

    MCP callthe_customer_factor_write → update_recurring_job

    REST endpointPATCH https://cotlet.dev/api/v1/the-customer-factor/recurring-job

    Parameters

    Parameters: update_recurring_job
    NameTypeDescription
    customer string required string Customer name, address or phone, as find_customers returns it.
    job string required string The recurring job, by job type.
    changes object object New price, period or added service.
    delete boolean boolean Delete the recurring job.

    Example input

    {
      "customer": "customer",
      "job": "job"
    }

    Example response

    {
      "customer": "Example Homeowner",
      "job": "Window cleaning, exterior",
      "price": 190,
      "applies_to": "future jobs",
      "saved": true
    }
  • put_job_on_hold Put a scheduled job on hold, with a reason. writeAsks first

    The job moves to the On Hold area of the calendar. For a recurring job the agent asks whether to hold this visit or all of them. By default you confirm each call; you can switch that off for this tool.

    MCP callthe_customer_factor_write → put_job_on_hold

    REST endpointPOST https://cotlet.dev/api/v1/the-customer-factor/job-on-hold/put

    Parameters

    Parameters: put_job_on_hold
    NameTypeDescription
    customer string required string Customer name, address or phone, as find_customers returns it.
    date string required string ISO date of the job.
    reason string string Why the job is on hold.
    all_recurring boolean boolean For a recurring job: hold all of them instead of this one only.

    Example input

    {
      "customer": "customer",
      "date": "date"
    }

    Example response

    {
      "customer": "Example Homeowner",
      "date": "2026-11-20",
      "status": "on hold",
      "reason": "Customer away",
      "all_recurring": false
    }
  • mark_job_completed Change a job's status from Open to Completed. writeAsks first

    Completed jobs fade on the daily calendar and are struck through on the weekly and monthly ones. Set it back to Open with the same tool if it was a mistake. By default you confirm each call; you can switch that off for this tool.

    MCP callthe_customer_factor_write → mark_job_completed

    REST endpointPOST https://cotlet.dev/api/v1/the-customer-factor/job-completed/mark

    Parameters

    Parameters: mark_job_completed
    NameTypeDescription
    customer string required string Customer name, address or phone, as find_customers returns it.
    date string required string ISO date of the job.

    Example input

    {
      "customer": "customer",
      "date": "date"
    }

    Example response

    {
      "customer": "Example Homeowner",
      "date": "2026-11-20",
      "job_type": "Window cleaning, exterior",
      "status": "Completed"
    }

Job setup2

The job types and packages in your dropdown, and checklists that follow a job into the mobile app.

  • manage_job_types List, add, edit or delete job types and job packages. writeAsks first

    Job types fill the dropdown when you schedule an estimate or a job. Run `list` first so the list does not grow duplicates. By default you confirm each call; you can switch that off for this tool.

    MCP callthe_customer_factor_write → manage_job_types

    REST endpointPOST https://cotlet.dev/api/v1/the-customer-factor/job-types/manage

    Parameters

    Parameters: manage_job_types
    NameTypeDescription
    action string required string `list`, `create`, `update` or `delete`. `list` only reads.
    name string string Job type or package name.
    package_items array array For a package: the items it covers.
    price number number Package price, for example a whole house special.

    Example input

    {
      "action": "action"
    }

    Example response

    {
      "job_types": [
        "Window cleaning, exterior",
        "Screen cleaning",
        "Gutter cleaning"
      ],
      "packages": [
        {
          "name": "Whole house special",
          "price": 99
        }
      ]
    }
  • create_job_checklist Create a job checklist with to-do items for chosen job types and customers. writeAsks first

    Once saved, the checklist shows next to every matching job in the software and the mobile app, where technicians tick items and leave notes. By default you confirm each call; you can switch that off for this tool.

    MCP callthe_customer_factor_write → create_job_checklist

    REST endpointPOST https://cotlet.dev/api/v1/the-customer-factor/job-checklists

    Parameters

    Parameters: create_job_checklist
    NameTypeDescription
    title string required string Checklist title.
    job_types array required array Job types it applies to, or `All jobs`.
    customers array array Specific customers, or leave empty for All Customers.
    items array required array The to-do items.

    Example input

    {
      "title": "title",
      "job_types": "job types",
      "items": "items"
    }

    Example response

    {
      "checklist": "Exterior window clean",
      "job_types": [
        "Window cleaning, exterior"
      ],
      "items": 4,
      "saved": true
    }

Invoices and payments7

Invoices from scheduled jobs, deposits, recorded payments, reminders and statements. No tool charges a card.

  • search_invoices Search the Invoices tab, for example all unpaid invoices of one customer. read

    Returns invoice number, customer, date, amount and paid status. Use it before record_payment or email_payment_reminders. Read only, it runs without asking.

    MCP callthe_customer_factor_read → search_invoices

    REST endpointGET https://cotlet.dev/api/v1/the-customer-factor/invoices/search

    Parameters

    Parameters: search_invoices
    NameTypeDescription
    status string string `unpaid`, `paid` or empty for all.
    customer string string Customer last name or company name.

    Example response

    {
      "invoices": [
        {
          "invoice": 1187,
          "customer": "Example Homeowner",
          "date": "2026-11-03",
          "amount": 235.4,
          "status": "unpaid"
        },
        {
          "invoice": 1192,
          "customer": "Example Homeowner",
          "date": "2026-11-10",
          "amount": 150,
          "status": "unpaid"
        }
      ]
    }
  • create_invoice Create one invoice from one or more scheduled jobs of a customer, with or without tax. writeAsks first

    Ticks the jobs under Invoice Status and clicks Create Invoice. The agent shows you the jobs and total before saving; email_invoice sends it. By default you confirm each call; you can switch that off for this tool.

    MCP callthe_customer_factor_write → create_invoice

    REST endpointPOST https://cotlet.dev/api/v1/the-customer-factor/invoices

    Parameters

    Parameters: create_invoice
    NameTypeDescription
    customer string required string Customer name, address or phone, as find_customers returns it.
    jobs array required array Scheduled jobs to invoice, by date and job type, from Currently Scheduled Jobs.
    tax_percent number number Tax percentage. Leave empty for no tax.

    Example input

    {
      "customer": "Example Homeowner",
      "jobs": [
        {
          "date": "2026-11-20",
          "job_type": "Window cleaning, exterior"
        },
        {
          "date": "2026-11-20",
          "job_type": "Screen cleaning"
        }
      ],
      "tax_percent": 7
    }

    Example response

    {
      "invoice": 1203,
      "customer": "Example Homeowner",
      "lines": [
        {
          "job": "Window cleaning, exterior",
          "amount": 180
        },
        {
          "job": "Screen cleaning",
          "amount": 40
        }
      ],
      "tax_percent": 7,
      "total": 235.4,
      "status": "unpaid"
    }
  • email_invoice Email an invoice to the customer, with an optional discount. writeAsks first

    The invoice goes to the customer's inbox, so the agent shows the total and recipient first. By default you confirm each call; you can switch that off for this tool.

    MCP callthe_customer_factor_write → email_invoice

    REST endpointPOST https://cotlet.dev/api/v1/the-customer-factor/invoice/email

    Parameters

    Parameters: email_invoice
    NameTypeDescription
    invoice integer required integer Invoice number.
    discount string string A dollar amount or a percentage, for example `10%`.
    template string string Invoice email template from create_email_template.

    Example input

    {
      "invoice": 1
    }

    Example response

    {
      "invoice": 1203,
      "to": "homeowner@example.com",
      "total": 235.4,
      "sent": true
    }
  • add_invoice_deposit Add a deposit to an invoice, as a dollar amount or a percentage. writeAsks first

    Saves with Update. The deposit due then shows on the invoice when you email it. By default you confirm each call; you can switch that off for this tool.

    MCP callthe_customer_factor_write → add_invoice_deposit

    REST endpointPOST https://cotlet.dev/api/v1/the-customer-factor/invoice-deposits

    Parameters

    Parameters: add_invoice_deposit
    NameTypeDescription
    invoice integer required integer Invoice number.
    deposit string required string For example `$50` or `25%`.

    Example input

    {
      "invoice": 1,
      "deposit": "deposit"
    }

    Example response

    {
      "invoice": 1210,
      "total": 900,
      "deposit": "25%",
      "deposit_due": 225,
      "saved": true
    }
  • record_payment Record a payment on one invoice, or one payment for several unpaid invoices. writeAsks first

    Records the payment and marks paid invoices with the Paid stamp. It does not charge a card; card processing through Square, Stripe or Worldpay stays in The Customer Factor's own payment window. By default you confirm each call; you can switch that off for this tool.

    MCP callthe_customer_factor_write → record_payment

    REST endpointPOST https://cotlet.dev/api/v1/the-customer-factor/payments

    Parameters

    Parameters: record_payment
    NameTypeDescription
    invoices array required array Invoice numbers, all from the same customer.
    amount number required number Amount paid, full or partial.
    method string required string Form of payment, for example check or cash.
    reference string string Check number or other reference.
    date string string ISO date. Defaults to today.

    Example input

    {
      "invoices": "invoices",
      "amount": 1,
      "method": "method"
    }

    Example response

    {
      "invoices": [
        1187,
        1192
      ],
      "amount": 385.4,
      "method": "check",
      "reference": "2045",
      "status": "Paid"
    }
  • email_payment_reminders Email payment reminders for selected unpaid invoices. writeAsks first

    Reminders reach your customers, so the agent lists who gets one before it sends. By default you confirm each call; you can switch that off for this tool.

    MCP callthe_customer_factor_write → email_payment_reminders

    REST endpointPOST https://cotlet.dev/api/v1/the-customer-factor/payment-reminders/email

    Parameters

    Parameters: email_payment_reminders
    NameTypeDescription
    invoices array array Invoice numbers. Leave empty for every unpaid invoice.
    exclude_customers array array Customers to leave out.
    message string string Reminder text. Leave empty for the template in Payment Reminder Settings.

    Example response

    {
      "reminders": 2,
      "customers": [
        "Example Homeowner",
        "Sample Office Park"
      ],
      "sent": true
    }
  • send_customer_statements Email or print statements for a period, for one customer or many. writeAsks first

    A statement lists the customer's invoices of the period. Bulk sending is supported, so the agent shows the customer count first. By default you confirm each call; you can switch that off for this tool.

    MCP callthe_customer_factor_write → send_customer_statements

    REST endpointPOST https://cotlet.dev/api/v1/the-customer-factor/customer-statements

    Parameters

    Parameters: send_customer_statements
    NameTypeDescription
    period string required string For example `This Month`, or a date range.
    customers array array Customers. Leave empty for everyone with invoices in the period.
    output string string `email` or `print`.

    Example input

    {
      "period": "period"
    }

    Example response

    {
      "period": "This Month",
      "statements": 2,
      "output": "email",
      "sent": true
    }

Proposals, tasks and notes4

Big Proposals for new work, tasks from Quick Add, private Specific Notes and your email templates.

  • create_big_proposal Create a multi-page Big Proposal in one of the online and PDF formats. writeAsks first

    When a prospect or customer clicks Accept, The Customer Factor emails you. You can keep several, for example one for residential and one for commercial. By default you confirm each call; you can switch that off for this tool.

    MCP callthe_customer_factor_write → create_big_proposal

    REST endpointPOST https://cotlet.dev/api/v1/the-customer-factor/big-proposals

    Parameters

    Parameters: create_big_proposal
    NameTypeDescription
    name string required string Proposal name, for example Commercial window cleaning.
    format string string One of the five online formats; the Help Center recommends Format 5.
    color string string One of the ten colors or a custom color.
    pages array array Pages to include, for example photos, W9 or license.

    Example input

    {
      "name": "Jane Doe"
    }

    Example response

    {
      "proposal": "Commercial window cleaning",
      "format": "Format 5",
      "pages": [
        "About us",
        "Photos",
        "W9",
        "License"
      ],
      "saved": true
    }
  • add_task Add a task from Quick Add, optionally assigned and repeating. writeAsks first

    An assigned task is work for a teammate, so it waits for your OK. By default you confirm each call; you can switch that off for this tool.

    MCP callthe_customer_factor_write → add_task

    REST endpointPOST https://cotlet.dev/api/v1/the-customer-factor/tasks

    Parameters

    Parameters: add_task
    NameTypeDescription
    title string required string Task title.
    assigned_to string string Who the task is for.
    description string string Optional details.
    date string required string ISO date and time.
    repeat string string Repeat rule, if the task repeats.

    Example input

    {
      "title": "title",
      "date": "date"
    }

    Example response

    {
      "task": "Call Sample Office Park about spring start",
      "assigned_to": "Office",
      "date": "2026-11-21T10:00",
      "saved": true
    }
  • edit_specific_note Add or edit a private Specific Note on a customer profile. writeAsks first

    Specific Notes are for the main user and admins, not for customers. By default you confirm each call; you can switch that off for this tool.

    MCP callthe_customer_factor_write → edit_specific_note

    REST endpointPATCH https://cotlet.dev/api/v1/the-customer-factor/specific-note

    Parameters

    Parameters: edit_specific_note
    NameTypeDescription
    customer string required string Customer name, address or phone, as find_customers returns it.
    date string string Date of the note to edit. Leave empty to add a new one.
    note string required string Note text.

    Example input

    {
      "customer": "customer",
      "note": "note"
    }

    Example response

    {
      "customer": "Example Homeowner",
      "date": "2026-11-14",
      "note": "Gate code changed, ask before arrival.",
      "saved": true
    }
  • create_email_template Create an estimate or invoice email template, from a sample if you like. writeAsks first

    Templates are used every time you email an estimate or invoice, so a new one waits for your OK. By default you confirm each call; you can switch that off for this tool.

    MCP callthe_customer_factor_write → create_email_template

    REST endpointPOST https://cotlet.dev/api/v1/the-customer-factor/email-templates

    Parameters

    Parameters: create_email_template
    NameTypeDescription
    kind string required string `estimate` or `invoice`.
    title string required string Template title, seen only by you.
    sample string string A sample to start from, for example "Email w/o pdf attachment (Recommended)" or "Include Credit Card button".
    subject string string Subject, if not from a sample.
    message string string Message, with % personalization tokens if you like.

    Example input

    {
      "kind": "kind",
      "title": "title"
    }

    Example response

    {
      "kind": "invoice",
      "title": "Invoice Template",
      "sample": "Include Credit Card button",
      "saved": true
    }

Your crew1

Email or text selected employees from Manage Employees.

  • message_employees Send an email or SMS to selected employees from Manage Employees. writeAsks first

    Messages reach your team, so the agent shows recipients and text before sending. By default you confirm each call; you can switch that off for this tool.

    MCP callthe_customer_factor_write → message_employees

    REST endpointPOST https://cotlet.dev/api/v1/the-customer-factor/employees/message

    Parameters

    Parameters: message_employees
    NameTypeDescription
    employees array required array Employees, or `all`.
    channel string required string `email` or `sms`.
    message string required string Message text.

    Example input

    {
      "employees": "employees",
      "channel": "channel",
      "message": "message"
    }

    Example response

    {
      "channel": "sms",
      "employees": [
        "Crew A",
        "Crew B"
      ],
      "sent": true
    }
Encrypted, revocable

Who can see my The Customer Factor session, and how do I revoke it?

  • What we store

    Your signed-in The Customer Factor browser profile, AES-256-GCM encrypted, in Finland. Never your password.

  • What your agent gets

    The 24 The Customer Factor tools. The session cookie stays in the Cloud Browser.

  • What the session sees

    The customers, jobs and invoices your user can open, and nothing more.

  • What no tool touches

    Card processing and your Square, Stripe or Worldpay connection, your employees' accounts and your plan.

  • If The Customer Factor signs you out

    You sign in again yourself, in the same Cloud Browser.

  • How to cut access

    Disable The Customer Factor for agents, reset the browser, or change your password.

You type your The Customer Factor password yourself; the agent only uses the session that sign-in leaves behind. Our site scores A+ on Qualys SSL Labs, securityheaders.com and Mozilla Observatory (live results).

We keep it working

What happens when The Customer Factor changes? The tools use the same screens your office uses.

Cotlet watches the apps it serves and updates the The Customer Factor server when its screens change, so scheduling and billing keep working without a change on your side.

New The Customer Factor features become available to the agent. It still sees only what your own user can see.

Cotlet never sees or stores your password. If The Customer Factor signs you out, one click in the Cotlet console reopens the Cloud Browser so you can sign in again.

22 tools ask first

Approvals, undo and mistakes Customers and your crew get nothing until you say so.

  1. 01 Find the jobs find_customers opens the scheduled jobs.
  2. 02 Show you the invoice Jobs, tax and total, before saving.
  3. 03 Save after your OK create_invoice writes it, unpaid.
  4. 04 Email when you say email_invoice sends it on a second OK.
Fixing a The Customer Factor write that went wrong
ActionHow to put it right
Job marked completedCall mark_job_completed again to set it back to Open
Recurring price or periodCall update_recurring_job with the earlier values; past jobs never changed
Deleted recurring jobOnly future jobs were removed; schedule it again with schedule_recurring_job
Emailed invoice, reminder or statementAlready with your customer: follow up with them directly

All 22 write tools ask first: by default you confirm each call, and you can switch that off per tool. The 2 read tools, customer and invoice search, run at once.

MCP call
{
  "name": "create_invoice",
  "arguments": {
    "customer": "Example Homeowner",
    "jobs": [
      {
        "date": "2026-11-20",
        "job_type": "Window cleaning, exterior"
      },
      {
        "date": "2026-11-20",
        "job_type": "Screen cleaning"
      }
    ],
    "tax_percent": 7
  }
}
REST
curl -X POST https://cotlet.dev/api/v1/the-customer-factor/invoices \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"customer":"Example Homeowner","jobs":[{"date":"2026-11-20","job_type":"Window cleaning, exterior"},{"date":"2026-11-20","job_type":"Screen cleaning"}],"tax_percent":7}'
Response
{
  "invoice": 1203,
  "customer": "Example Homeowner",
  "lines": [
    {
      "job": "Window cleaning, exterior",
      "amount": 180
    },
    {
      "job": "Screen cleaning",
      "amount": 40
    }
  ],
  "tax_percent": 7,
  "total": 235.4,
  "status": "unpaid"
}

The example invoices $180 of exterior window cleaning and $40 of screen cleaning with 7% tax: $235.40, unpaid and not yet emailed. A cron job or n8n flow can make the same call over REST at /api/v1/the-customer-factor with the same key and price, in JSON. Failed calls are free.

Pay per call

How much does the The Customer Factor MCP server cost?

About $27 a monthfor a window cleaning contractor with about forty recurring customers, 4,730 credits. Your The Customer Factor plan stays as it is.

Illustrative month, our assumption: successful calls for this workload
JobCallsCredits
New customers with a recurring schedule3 × 6180
Jobs marked completed1 × 80800
Friday invoices, created and emailed2 × 601,200
Payments recorded against invoices2 × 40800
Unpaid invoice check and reminders2 × 480
Holds and recurring price changes2 × 8160
Month-end statements1 × 110
Cloud Browser, 30 days1,500
Total323 calls4,730

The smallest pack, 5,000 credits for $29, covers this month. A bigger route with more invoices uses more calls.

  • Free 7-day trial, no card
  • 10 credits per successful call, MCP or REST
  • 50 credits a day for the Cloud Browser
  • Your The Customer Factor plan applies as it is

Credit packs are one-time purchases, not a subscription. The month above is an example built from our own assumptions, not measured customer usage.

Cotlet credit packs: price, credits and calls at 10 credits each
Credits Price, one time Calls at 10 credits Per 1,000 credits
5,000 $29 500 $5.80
15,000 $79 1,500 $5.27
32,000 $149 3,200 $4.66
60,000 $249 6,000 $4.15

Only successful calls use credits; failed calls and timeouts cost nothing. At a balance of 0 calls pause, never a surprise charge. Authenticate with the Authorization: Bearer header.

Other options

The Customer Factor MCP server: other ways to connect What each route does for a contractor's office, and where it stops.

Other ways to work with The Customer Factor, checked 14 Nov 2026
OptionWhat it doesWhere it stops
The Customer Factor bulk screensPay several invoices at once, send reminders and statements in bulk.Still one screen and one click at a time, at your desk.
The Customer Factor mobile appCalendar, invoices, payments and prospects in the field.Made for your thumbs, not for an AI agent or a script.
By handOpen each customer and job and click through.Only while you are at the screen.

If the bulk screens already save you the time, keep using them: they are The Customer Factor's own tools. Cotlet fits when you want ChatGPT, Claude or a script doing the scheduling and billing on request or on a schedule, from your own login, with nothing to host.

EU company, since 2019

Who runs Cotlet A company you can look up.

Cotlet is run by Take Group sp. z o.o., a software company registered in Poland, EU (VAT PL6342984273) and in business since 2019. Its founders are Bart Krawczyk (Co-founder, CTO) and Jake Slugocki (Co-founder, SEO, sales and marketing). Write to contact@cotlet.dev with questions about the The Customer Factor tools.

The Customer Factor MCP server: questions

How do I get access?

Sign up free at https://cotlet.dev/signup?app=the-customer-factor, turn on The Customer Factor under Integrations in the console and log in at https://www.thecustomerfactor.com/login/ in your Cloud Browser. Then connect your AI agent and ask it for this week's unpaid invoices. The trial needs no card.

Does The Customer Factor have an API?

The Customer Factor publishes no public API: its website and Help Center document no developer API (checked 14 Nov 2026). No The Customer Factor MCP server and no official ChatGPT or Claude connector was verified. Cotlet does not need one: it works in your own signed-in account.

Can the agent charge a customer's card?

No. record_payment records payments such as checks and cash and marks invoices paid. Card processing through Square, Stripe or Worldpay, which The Customer Factor integrates, stays in its own payment window.

What happens to past jobs when a recurring job changes?

Nothing. The Help Center says a price or period change applies to future jobs, and deleting a recurring job removes only future jobs. update_recurring_job works the same way.

Which The Customer Factor user should I sign in with?

The user whose office work the agent should do. Specific Notes are for the main user and admins, so sign in as one of them if the agent should read or edit those notes. The agent sees only what that user can see.

Is the MCP server different from the REST API?

Only in how it is called. Both carry the same 24 tools, inputs, answers, API key and price. Agents use MCP; scripts and n8n HTTP steps use REST.

Is Cotlet affiliated with The Customer Factor?

No. Cotlet is independent and not affiliated with The Customer Factor.

Hand your next The Customer Factor billing run to your agent.

Free 7-day trial with 2,000 credits, no card needed.