Complete N8N Guide: Automate Past Due Invoice Follow-ups for Printavo Users

Stop Chasing Past Due Invoices Manually! ๐Ÿš€

Complete N8N Automation Guide for Printavo Users

๐Ÿ’ธ Tired of manual follow-ups? This free automation checks for overdue invoices every 2 days and sends professional follow-up emails automatically!

๐ŸŽฏ What This Automation Does

Smart Invoice Detection

Automatically scans your Printavo account for invoices with specific completion statuses that are past due

Days Late Calculation

Calculates exactly how many days each invoice is overdue for personalized follow-up messaging

Professional Email Follow-ups

Sends courteous, professional reminder emails with invoice details and payment links

Automated Scheduling

Runs every 2 days at 10 AM automatically - set it and forget it!

Pro Tip: This automation targets completed jobs with outstanding balances - perfect for getting paid faster on finished work!

๐Ÿ“‹ Before You Start

โœ… What You Need:

  • Active Printavo account
  • Printavo API credentials (email + token)
  • Gmail account for sending emails
  • Free N8N account or self-hosted instance
  • 15 minutes of setup time

๐ŸŽฏ Targeted Invoice Statuses:

  • ๐Ÿš€ Job Complete - Shipped ๐Ÿ
  • *Job Complete - Delivered ๐Ÿ
  • ๐Ÿš€Job Complete - Payment Request

Only invoices with these exact statuses and outstanding balances will trigger follow-ups.

๐Ÿ”‘ Step 1: Get Your Printavo API Credentials

1

Log into Printavo

Go to your Printavo dashboard and navigate to your account settings.

2

Find API Section

Look for "API" or "Integrations" in your account settings menu.

3

Generate API Token

Create a new API token if you don't have one. Copy both your email and the generated token.

Important: Keep your API credentials secure! You'll need your Printavo email and API token for the next steps.

โš™๏ธ Step 2: Set Up N8N Workflow

1

Create New Workflow

In your N8N instance, click "New Workflow" and give it a descriptive name like "Printavo Invoice Follow-up".

2

Import Workflow JSON

Copy and paste the complete workflow JSON below into N8N's import function:

{ "nodes": [ { "parameters": { "rule": { "interval": [ { "daysInterval": 2, "triggerAtHour": 10 } ] } }, "id": "7e24aa59-1e8b-416a-9e2d-798ea8b558b1", "name": "Schedule Trigger", "type": "n8n-nodes-base.scheduleTrigger", "typeVersion": 1.2, "position": [0, 0] }, { "parameters": { "requestMethod": "POST", "url": "https://www.printavo.com/api/v2", "jsonParameters": true, "options": {}, "bodyParametersJson": "{\"query\":\"query FetchInvoices { invoices(first: 1000, sortOn: VISUAL_ID, sortDescending: true) { nodes { visualId status { name } paymentDueAt amountOutstanding publicUrl contact { firstName email } } } }\"}", "headerParametersJson": "{\"Content-Type\":\"application/json\",\"email\":\"YOUR_PRINTAVO_EMAIL\",\"token\":\"YOUR_PRINTAVO_TOKEN\"}" }, "id": "361f9827-9b81-4ef7-9474-c3b51568bdc0", "name": "Fetch Invoices", "type": "n8n-nodes-base.httpRequest", "typeVersion": 1, "position": [208, 0] }, { "parameters": { "functionCode": "const invs = items[0].json.data.invoices.nodes;\nconst statuses = [\n '๐Ÿš€ Job Complete - Shipped ๐Ÿ',\n '*Job Complete - Delivered ๐Ÿ',\n '๐Ÿš€Job Complete - Payment Request'\n];\nconst today = new Date().toISOString().split('T')[0];\nreturn invs\n .filter(inv =>\n statuses.includes(inv.status.name) &&\n inv.paymentDueAt <= today &&\n inv.amountOutstanding > 0\n )\n .map(inv => ({ json: inv }));" }, "id": "72c35faf-543f-4dc8-b859-91b6fb45a602", "name": "Filter Exact Statuses", "type": "n8n-nodes-base.function", "typeVersion": 1, "position": [400, 0] }, { "parameters": { "values": { "string": [ { "name": "daysLate", "value": "={{ Math.max(0, Math.floor((new Date().getTime() - new Date($json.paymentDueAt).getTime()) / (1000 * 60 * 60 * 24))) }}" } ] }, "options": {} }, "id": "e8e79e28-c5be-4b07-bdde-28a14b05b6f3", "name": "Calculate Days Late", "type": "n8n-nodes-base.set", "typeVersion": 2, "position": [576, 0] }, { "parameters": { "sendTo": "={{ $json.contact.email }}, YOUR_SHOP_EMAIL@domain.com", "subject": "Invoice {{ $json.visualId }} - Past Due Balance", "message": "=Hi {{ $json.contact.firstName }},

This is a friendly reminder that you have an outstanding balance on invoice #{{ $json.visualId }}, which is now {{ $json.daysLate }} days past due.

Please take a moment to review the invoice and make payment as soon as possible to avoid any late fees or interruptions in service.

If you've already sent payment, please disregard this message. Otherwise, feel free to reach out if you have any questions or need help accessing the invoice.

Thank you,
Your Print Shop Team", "options": {} }, "type": "n8n-nodes-base.gmail", "typeVersion": 2.1, "position": [768, 0], "id": "4843f080-665d-405f-85e5-f3f339f87e4b", "name": "Send Email", "credentials": { "gmailOAuth2": { "id": "YOUR_GMAIL_CREDENTIAL_ID", "name": "Your Gmail Account" } } } ], "connections": { "Schedule Trigger": { "main": [ [ { "node": "Fetch Invoices", "type": "main", "index": 0 } ] ] }, "Fetch Invoices": { "main": [ [ { "node": "Filter Exact Statuses", "type": "main", "index": 0 } ] ] }, "Filter Exact Statuses": { "main": [ [ { "node": "Calculate Days Late", "type": "main", "index": 0 } ] ] }, "Calculate Days Late": { "main": [ [ { "node": "Send Email", "type": "main", "index": 0 } ] ] } } }

๐Ÿ”ง Step 3: Configure Each Node

Schedule Trigger Node

This node automatically runs your workflow every 2 days at 10 AM. You can customize the timing:

Current Settings:

  • Interval: Every 2 days
  • Time: 10:00 AM
  • Timezone: Your local timezone
Customization: Want different timing? Change "daysInterval" to 1 for daily checks, or "triggerAtHour" to a different hour (0-23).

Fetch Invoices Node

This HTTP Request node connects to Printavo's GraphQL API to fetch your invoice data.

Action Required: Replace the placeholder credentials with your actual Printavo email and API token.

Configuration Steps:

  1. Click on the "Fetch Invoices" node
  2. In the Headers section, find the JSON:
{ "Content-Type": "application/json", "email": "YOUR_PRINTAVO_EMAIL", "token": "YOUR_PRINTAVO_TOKEN" }
  1. Replace "YOUR_PRINTAVO_EMAIL" with your actual Printavo email
  2. Replace "YOUR_PRINTAVO_TOKEN" with your API token from Step 1

What This Query Fetches:

  • โ€ข Invoice ID and visual ID
  • โ€ข Current status name
  • โ€ข Payment due date
  • โ€ข Outstanding amount
  • โ€ข Customer contact info (name & email)
  • โ€ข Public invoice URL

Filter Exact Statuses Node

This JavaScript function filters invoices to only include those that meet our follow-up criteria.

Filter Criteria:

  • Status matches one of the three completion statuses
  • Payment due date is today or earlier
  • Outstanding balance is greater than $0
const invs = items[0].json.data.invoices.nodes; const statuses = [ '๐Ÿš€ Job Complete - Shipped ๐Ÿ', '*Job Complete - Delivered ๐Ÿ', '๐Ÿš€Job Complete - Payment Request' ]; const today = new Date().toISOString().split('T')[0]; return invs .filter(inv => statuses.includes(inv.status.name) && inv.paymentDueAt <= today && inv.amountOutstanding > 0 ) .map(inv => ({ json: inv }));
Customization: Need to target different statuses? Modify the "statuses" array with your exact Printavo status names.

Calculate Days Late Node

This Set node calculates how many days past due each invoice is for personalized messaging.

Calculation Formula:

Math.max(0, Math.floor((new Date().getTime() - new Date($json.paymentDueAt).getTime()) / (1000 * 60 * 60 * 24)))

This ensures we never show negative days and rounds down to whole days.

No configuration needed - this node automatically calculates based on the payment due date from Printavo.

Gmail Node Setup

This node sends the automated follow-up emails through your Gmail account.

Action Required: You'll need to authenticate your Gmail account and customize the email template.

Gmail Authentication Steps:

  1. Click on the "Send Email" node
  2. Click "Create New" next to Gmail credentials
  3. Follow N8N's OAuth flow to connect your Gmail
  4. Test the connection to ensure it works

Email Template Configuration:

Recipients:
={{ $json.contact.email }}, YOUR_SHOP_EMAIL@domain.com

Replace "YOUR_SHOP_EMAIL@domain.com" with your shop's email for BCC copies.

Subject Line:
Invoice {{ $json.visualId }} - Past Due Balance
Email Body Template:
Hi {{ $json.contact.firstName }}, This is a friendly reminder that you have an outstanding balance on invoice #{{ $json.visualId }}, which is now {{ $json.daysLate }} days past due. Please take a moment to review the invoice and make payment as soon as possible to avoid any late fees or interruptions in service. If you've already sent payment, please disregard this message. Otherwise, feel free to reach out if you have any questions or need help accessing the invoice. Thank you, Your Print Shop Team
Customization: Personalize the email template with your shop's branding, contact info, and preferred tone. You can also add HTML formatting for better presentation.

๐Ÿงช Step 4: Test Your Workflow

Before activating the automation, it's crucial to test each step to ensure everything works correctly.

1

Manual Execution

Click the "Execute Workflow" button to run a manual test. This will help you verify:

  • Printavo API connection is working
  • Invoice filtering logic is correct
  • Days late calculation is accurate
  • Email formatting looks good
2

Check Each Node Output

Click on each node after execution to see the data flow:

  • Fetch Invoices: Should show all your recent invoices
  • Filter Statuses: Should only show overdue completed jobs
  • Calculate Days: Should add the "daysLate" field
  • Send Email: Should show successful email delivery
3

Verify Email Delivery

Check that test emails were sent correctly and review the formatting in your email client.

Important: If you have real overdue invoices, the test will send actual emails! Consider adding a test filter temporarily or using a test Printavo environment.

๐Ÿš€ Step 5: Activate Your Automation

1

Save Your Workflow

Use Ctrl+S (or Cmd+S on Mac) to save all your configurations.

2

Activate the Trigger

Toggle the "Active" switch in the top-right corner of your workflow. The Schedule Trigger will show as "Active" when properly enabled.

3

Monitor Execution

Check the execution history regularly to ensure the workflow runs successfully every 2 days.

๐ŸŽ‰ Congratulations!

Your automated invoice follow-up system is now live! It will check for overdue invoices every 2 days at 10 AM and send professional reminder emails automatically.

๐ŸŽจ Customization Options

Email Personalization

  • โ€ข Add your company logo and branding
  • โ€ข Include direct payment links from Printavo
  • โ€ข Adjust tone based on days late (gentle vs. firm)
  • โ€ข Add late fee information
  • โ€ข Include contact phone numbers

Timing Adjustments

  • โ€ข Change frequency (daily, weekly, etc.)
  • โ€ข Adjust execution time
  • โ€ข Add business day filtering
  • โ€ข Create escalation schedules
  • โ€ข Skip holidays and weekends

Advanced Filtering

  • โ€ข Add minimum amount thresholds
  • โ€ข Exclude specific customers
  • โ€ข Filter by invoice age ranges
  • โ€ข Add customer payment history checks
  • โ€ข Include/exclude certain statuses

Reporting & Tracking

  • โ€ข Add Google Sheets logging
  • โ€ข Track email open rates
  • โ€ข Monitor payment responses
  • โ€ข Generate overdue reports
  • โ€ข Set up Slack notifications
Next Level: Want to add SMS notifications, progressive email sequences, or integrate with other tools? N8N's visual workflow builder makes it easy to expand this automation!

๐Ÿ”ง Troubleshooting Common Issues

โŒ "Unauthorized" Error in Fetch Invoices

Cause: Incorrect Printavo API credentials

Solution:

  • Double-check your Printavo email in the headers
  • Verify your API token is correct and active
  • Ensure there are no extra spaces in the credentials
  • Try regenerating your API token in Printavo

โŒ No Invoices Found in Filter

Cause: Status names don't match exactly

Solution:

  • Check your exact status names in Printavo
  • Update the status array in the filter function
  • Ensure emojis and spacing match exactly
  • Test with a broader date range temporarily

โŒ Gmail Authentication Failed

Cause: Gmail security settings or OAuth issues

Solution:

  • Enable 2-factor authentication on your Gmail account
  • Use an app-specific password if needed
  • Check Google account security settings
  • Try re-authenticating the Gmail connection

โŒ Workflow Not Executing on Schedule

Cause: Trigger not properly activated or N8N instance issues

Solution:

  • Ensure the workflow is marked as "Active"
  • Check that your N8N instance is running continuously
  • Verify timezone settings match your expectation
  • Review execution logs for error details

๐Ÿ’ก Best Practices & Tips

Security

  • โ€ข Store API credentials securely in N8N
  • โ€ข Use environment variables for sensitive data
  • โ€ข Regularly rotate your API tokens
  • โ€ข Monitor workflow execution logs

Email Best Practices

  • โ€ข Keep messages professional and friendly
  • โ€ข Include clear payment instructions
  • โ€ข Provide multiple contact methods
  • โ€ข Test email formatting across devices

Performance

  • โ€ข Monitor execution times and success rates
  • โ€ข Set up error notifications
  • โ€ข Keep workflow simple and reliable
  • โ€ข Backup your workflow configuration

Customer Relations

  • โ€ข Avoid over-sending follow-ups
  • โ€ข Personalize messages when possible
  • โ€ข Provide easy payment options
  • โ€ข Track customer responses

๐Ÿš€ What's Next?

Congratulations! You've successfully automated your invoice follow-ups. Here are some ideas to expand your automation:

๐Ÿ’ผ Business Process Automation

  • โ€ข Automate job status notifications to customers
  • โ€ข Create automatic shipping confirmations
  • โ€ข Set up inventory low-stock alerts
  • โ€ข Generate monthly business reports

๐Ÿ“Š Advanced Features

  • โ€ข Add progressive email sequences
  • โ€ข Integrate with accounting software
  • โ€ข Create customer payment portals
  • โ€ข Set up SMS notifications via Twilio

Want More Automation Ideas?

Join the ScreenPrint GPT community for more automation workflows, AI tools, and print shop growth strategies!

๐ŸŒ Visit: ScreenPrintGPT.com

๐Ÿ“ธ Follow: @screenprint_gpt on Instagram

๐Ÿ’ฌ Comment "AUTOMATION" for more workflows like this one!

Built by Print Pros, for Print Pros

This automation saves hours every week and helps you get paid faster. Share it with other shop owners who need to stop chasing invoices manually!

ยฉ 2024 ScreenPrint GPT
โ€ข
Free Tools for Print Shops
โ€ข
AI-Powered Business Growth

Questions about this guide? Tag us @screenprint_gpt on Instagram!