PeoplePerHour automation · runs weekly

Raise PeoplePerHour invoices for finished work

Escrow money on PeoplePerHour reaches you only after you raise an invoice, and a buyer's "looks great, thanks" can sit unbilled in a WorkStream for a week. Invoicing too early is its own problem, because PeoplePerHour forbids billing before the work is delivered.

Cotlet does it in your own PeoplePerHour account with list_workstreams, get_workstream and create_invoice, called by your AI agent, an n8n workflow or a script.

Hosted · nothing to install or maintain

Official options

Can PeoplePerHour do this on its own?

PeoplePerHour has no API for invoices (checked 12 Oct 2026). Its native option for recurring work is AutoPay: the buyer sets a weekly or monthly amount and is charged each cycle, while the freelancer can only ask for it under MORE > REQUEST AUTOPAY and wait for approval. AutoPay suits fixed retainers. Project and Offer work is still billed by hand, one Raise Invoice form per WorkStream.

By hand

How you do it in PeoplePerHour today

  1. Check under Settings > Payments on PeoplePerHour that your bank details and address are filled in before the first invoice.
  2. Open the WorkStream inbox and pick a stream where the buyer accepted your proposal; PeoplePerHour allows invoices only there.
  3. At the bottom of the WorkStream click Raise Invoice, fill in the form and click Send. For an Offer the amount must equal the Offer price.
  4. PeoplePerHour posts the invoice in the WorkStream and emails the buyer, who then pays it or rejects it from a drop-down menu on the invoice.
  5. Repeat stream by stream, matching what each buyer approved against what you already invoiced, which is where finished jobs slip through unbilled.

With an agent

How to raise PeoplePerHour invoices for finished work

Prompt

Every Friday, go through my active WorkStreams, find jobs the buyer has signed off but I have not invoiced, and draft each invoice for the agreed price.
  1. 01

    Keep only billable streams

    The agent goes through list_workstreams and keeps streams with an accepted proposal. A stream with only a pending proposal is skipped, because PeoplePerHour will not take an invoice there.

  2. 02

    Look for sign-off, not just delivery

    In get_workstream it reads the messages after the last delivery. A clear approval from the buyer counts. A delivery with no reply, or a buyer asking for changes, is reported as waiting and not billed.

  3. 03

    Bill only the balance

    Invoices already raised in the stream are subtracted from the agreed price, so a job with an earlier part invoice is billed for what remains. A stream that is fully invoiced is skipped.

  4. 04

    Raise after your OK

    create_invoice gets the remaining amount and a description that names the delivered work. Offer purchases are billed at the Offer price only, whatever the prompt says.

  5. 05

    Report what is still open

    The run ends with invoices raised, jobs waiting for sign-off and older invoices still unpaid after the payment term, so you know which buyer to chase.

What you get back

Example data

Invoices raised after your OK: 2, total £770.
Maria S., Landing page for a SaaS launch: £450, approved in the WorkStream on Wednesday.
Tom R., Shopify product pages: £320, approved on Thursday after the second revision.
Waiting for sign-off: Priya N., Pitch deck refresh, delivered Tuesday, no reply yet.
Skipped: Daniel K., proposal still pending, no invoice allowed.
Unpaid past 7 days: Anna B., £180, raised on 2 Oct.

Other ways to ask

  • Raise the invoice for the Maria S. landing page now; she approved the final files this morning.
  • Every Monday, list invoices unpaid for more than 7 days without raising anything new.
  • At month end, invoice every signed-off job and give me the total per currency.

Before you automate it

What PeoplePerHour allows, and what to know first

  • PeoplePerHour lets a freelancer raise an invoice only in a WorkStream where the buyer accepted a proposal, and an Offer can be invoiced only for its purchase price.
  • Buyers on PeoplePerHour have 7 days to pay or reject an invoice for an Offer and 15 days for a Project. When an invoice stays unpaid past 7 days, PeoplePerHour chases it and can release Escrow funds automatically.
  • PeoplePerHour forbids asking for money out of Escrow before the work is delivered, and expects at least two further revisions if the buyer is not satisfied at first.
  • A paid PeoplePerHour invoice shows as Pending during security checks, usually minutes or hours and up to 3 working days, and funds become withdrawable after a clearing period of about 14 working days.

create_invoice asks for your OK by default. To run it weekly without you, switch confirmation off for that tool in your dashboard.

Sources: PeoplePerHour Help: Raising invoices · PeoplePerHour Help: Paying invoices · PeoplePerHour Help: My Buyer hasn't paid and I wasn't covered by Escrow · PeoplePerHour Help: How do I get paid?

REST

Call create_invoice from a script

curl

curl https://cotlet.dev/api/v1/peopleperhour/create_invoice \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"workstream_id":"ws_7731","amount":450,"description":"Landing page design in Figma, final files delivered and approved"}'

Example response

{
  "invoice_id": "inv_3318",
  "workstream_id": "ws_7731",
  "amount": 300,
  "description": "Landing page design, week 2",
  "status": "sent",
  "raised_at": "2026-10-16T16:00:00Z"
}

MCP: add https://cotlet.dev/mcp/v1 with the same key; the tool is peopleperhour_create_invoice. Example data.

Schedule it in n8n, Make, Zapier or cron

Tools

PeoplePerHour tools this automation uses

Cotlet PeoplePerHour tools used to raise PeoplePerHour invoices for finished work
Tool Parameters
list_workstreams awaiting_reply, limit, cursor
get_workstream workstream_id
create_invoice workstream_id, amount, description
All 11 PeoplePerHour tools with descriptions

Give your agent access to PeoplePerHour.

Free 7-day trial with 5,000 credits, no card needed. Cotlet is independent and not affiliated with PeoplePerHour.