Local services & SaaS
Service Autopilot
Jobs, schedules, estimates and invoices in Service Autopilot.
14 endpoints
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.
24 tools Read and write
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.
| What you need | The Customer Factor alone | Cotlet |
|---|---|---|
| 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
Once, in a browser we host for you.
One address in its settings.
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
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.
Add the Cotlet address. Enter https://cotlet.dev/mcp/v1 as the MCP server or connector URL in your agent.
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.
Settings > Apps & Connectors > Create
MCP server URL: https://cotlet.dev/mcp/v1/connect
Authentication: OAuth 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/mcp.json
{
"mcpServers": {
"cotlet": {
"url": "https://cotlet.dev/mcp/v1",
"headers": { "Authorization": "Bearer ${env:COTLET_API_KEY}" }
}
}
} # ~/.codex/config.toml
[mcp_servers.cotlet]
url = "https://cotlet.dev/mcp/v1"
bearer_token_env_var = "COTLET_API_KEY" 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 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.
Search first, then add residential or commercial customers, prospects and extra job locations.
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
| Name | Type | Description |
|---|---|---|
| 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. |
{
"query": "query"
} {
"customers": [
{
"customer": "Example Homeowner",
"type": "Residential",
"address": "12 Oak Lane, Springfield",
"phone": "+1 555 0100",
"recurring_jobs": 1
}
]
} 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
| Name | Type | Description |
|---|---|---|
| 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. |
{
"type": "type",
"fields": "fields"
} {
"customer": "Example Homeowner",
"type": "Residential",
"address": "12 Oak Lane, Springfield",
"saved": true
} 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
| Name | Type | Description |
|---|---|---|
| type string required | string | `residential` or `commercial`. |
| fields object required | object | Full name, address and contact details. |
{
"type": "type",
"fields": "fields"
} {
"prospect": "Sample Office Park",
"type": "Commercial",
"saved": true
} 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
| Name | Type | Description |
|---|---|---|
| prospect string required | string | Prospect name, as find_customers returns it. |
{
"prospect": "prospect"
} {
"customer": "Sample Office Park",
"status": "customer"
} 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
| Name | Type | Description |
|---|---|---|
| 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. |
{
"customer": "customer",
"address": "address"
} {
"customer": "Example Homeowner",
"location": "48 Lake Road, Springfield",
"type": "Residential",
"bill_to": false,
"saved": true
} Single and recurring jobs, recurring changes that apply to future jobs only, holds and completions.
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
| Name | Type | Description |
|---|---|---|
| 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". |
{
"customer": "customer",
"date": "date",
"job_type": "job type"
} {
"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
} 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
| Name | Type | Description |
|---|---|---|
| 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. |
{
"customer": "customer",
"first_date": "first date",
"job_type": "job type",
"period": "period"
} {
"customer": "Example Homeowner",
"job_type": "Window cleaning, exterior",
"period": "every 4 weeks",
"exclude_months": [
"December",
"January",
"February"
],
"ends": "Never",
"scheduled": true
} 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
| Name | Type | Description |
|---|---|---|
| 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. |
{
"customer": "customer",
"job": "job"
} {
"customer": "Example Homeowner",
"job": "Window cleaning, exterior",
"price": 190,
"applies_to": "future jobs",
"saved": true
} 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
| Name | Type | Description |
|---|---|---|
| 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. |
{
"customer": "customer",
"date": "date"
} {
"customer": "Example Homeowner",
"date": "2026-11-20",
"status": "on hold",
"reason": "Customer away",
"all_recurring": false
} 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
| Name | Type | Description |
|---|---|---|
| customer string required | string | Customer name, address or phone, as find_customers returns it. |
| date string required | string | ISO date of the job. |
{
"customer": "customer",
"date": "date"
} {
"customer": "Example Homeowner",
"date": "2026-11-20",
"job_type": "Window cleaning, exterior",
"status": "Completed"
} The job types and packages in your dropdown, and checklists that follow a job into the mobile app.
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
| Name | Type | Description |
|---|---|---|
| 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. |
{
"action": "action"
} {
"job_types": [
"Window cleaning, exterior",
"Screen cleaning",
"Gutter cleaning"
],
"packages": [
{
"name": "Whole house special",
"price": 99
}
]
} 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
| Name | Type | Description |
|---|---|---|
| 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. |
{
"title": "title",
"job_types": "job types",
"items": "items"
} {
"checklist": "Exterior window clean",
"job_types": [
"Window cleaning, exterior"
],
"items": 4,
"saved": true
} Invoices from scheduled jobs, deposits, recorded payments, reminders and statements. No tool charges a card.
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
| Name | Type | Description |
|---|---|---|
| status string | string | `unpaid`, `paid` or empty for all. |
| customer string | string | Customer last name or company name. |
{
"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"
}
]
} 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
| Name | Type | Description |
|---|---|---|
| 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. |
{
"customer": "Example Homeowner",
"jobs": [
{
"date": "2026-11-20",
"job_type": "Window cleaning, exterior"
},
{
"date": "2026-11-20",
"job_type": "Screen cleaning"
}
],
"tax_percent": 7
} {
"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 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
| Name | Type | Description |
|---|---|---|
| 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. |
{
"invoice": 1
} {
"invoice": 1203,
"to": "homeowner@example.com",
"total": 235.4,
"sent": true
} 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
| Name | Type | Description |
|---|---|---|
| invoice integer required | integer | Invoice number. |
| deposit string required | string | For example `$50` or `25%`. |
{
"invoice": 1,
"deposit": "deposit"
} {
"invoice": 1210,
"total": 900,
"deposit": "25%",
"deposit_due": 225,
"saved": true
} 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
| Name | Type | Description |
|---|---|---|
| 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. |
{
"invoices": "invoices",
"amount": 1,
"method": "method"
} {
"invoices": [
1187,
1192
],
"amount": 385.4,
"method": "check",
"reference": "2045",
"status": "Paid"
} 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
| Name | Type | Description |
|---|---|---|
| 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. |
{
"reminders": 2,
"customers": [
"Example Homeowner",
"Sample Office Park"
],
"sent": true
} 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
| Name | Type | Description |
|---|---|---|
| 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`. |
{
"period": "period"
} {
"period": "This Month",
"statements": 2,
"output": "email",
"sent": true
} Big Proposals for new work, tasks from Quick Add, private Specific Notes and your email templates.
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
| Name | Type | Description |
|---|---|---|
| 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. |
{
"name": "Jane Doe"
} {
"proposal": "Commercial window cleaning",
"format": "Format 5",
"pages": [
"About us",
"Photos",
"W9",
"License"
],
"saved": true
} 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
| Name | Type | Description |
|---|---|---|
| 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. |
{
"title": "title",
"date": "date"
} {
"task": "Call Sample Office Park about spring start",
"assigned_to": "Office",
"date": "2026-11-21T10:00",
"saved": true
} 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
| Name | Type | Description |
|---|---|---|
| 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. |
{
"customer": "customer",
"note": "note"
} {
"customer": "Example Homeowner",
"date": "2026-11-14",
"note": "Gate code changed, ask before arrival.",
"saved": true
} 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
| Name | Type | Description |
|---|---|---|
| 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. |
{
"kind": "kind",
"title": "title"
} {
"kind": "invoice",
"title": "Invoice Template",
"sample": "Include Credit Card button",
"saved": true
} Email or text selected employees from Manage Employees.
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
| Name | Type | Description |
|---|---|---|
| employees array required | array | Employees, or `all`. |
| channel string required | string | `email` or `sms`. |
| message string required | string | Message text. |
{
"employees": "employees",
"channel": "channel",
"message": "message"
} {
"channel": "sms",
"employees": [
"Crew A",
"Crew B"
],
"sent": true
} Your signed-in The Customer Factor browser profile, AES-256-GCM encrypted, in Finland. Never your password.
The 24 The Customer Factor tools. The session cookie stays in the Cloud Browser.
The customers, jobs and invoices your user can open, and nothing more.
Card processing and your Square, Stripe or Worldpay connection, your employees' accounts and your plan.
You sign in again yourself, in the same Cloud Browser.
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).
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.
| Action | How to put it right |
|---|---|
| Job marked completed | Call mark_job_completed again to set it back to Open |
| Recurring price or period | Call update_recurring_job with the earlier values; past jobs never changed |
| Deleted recurring job | Only future jobs were removed; schedule it again with schedule_recurring_job |
| Emailed invoice, reminder or statement | Already 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.
{
"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
}
} 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}' {
"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.
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.
| Job | Calls | Credits |
|---|---|---|
| New customers with a recurring schedule | 3 × 6 | 180 |
| Jobs marked completed | 1 × 80 | 800 |
| Friday invoices, created and emailed | 2 × 60 | 1,200 |
| Payments recorded against invoices | 2 × 40 | 800 |
| Unpaid invoice check and reminders | 2 × 4 | 80 |
| Holds and recurring price changes | 2 × 8 | 160 |
| Month-end statements | 1 × 1 | 10 |
| Cloud Browser, 30 days | 1,500 | |
| Total | 323 calls | 4,730 |
The smallest pack, 5,000 credits for $29, covers this month. A bigger route with more invoices uses more calls.
Credit packs are one-time purchases, not a subscription. The month above is an example built from our own assumptions, not measured customer usage.
| 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.
| Option | What it does | Where it stops |
|---|---|---|
| The Customer Factor bulk screens | Pay 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 app | Calendar, invoices, payments and prospects in the field. | Made for your thumbs, not for an AI agent or a script. |
| By hand | Open 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.
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.
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.
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.
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.
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.
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.
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.
No. Cotlet is independent and not affiliated with The Customer Factor.
Free 7-day trial with 2,000 credits, no card needed.
May we use Google Analytics to see which pages help people? It sets cookies only if you accept. No ads, and we never sell data. Cookie policy