Monday.com Integration for Ninja Forms
WordPress plug-in to send NinjaForms submissions to a Monday.com board.
Install
No release zip yet. The repository archive installs, but the folder name will carry the branch suffix and updates will not flow:
wp plugin install https://github.com/paulstroot/monday-nf-integration/archive/refs/heads/main.zipWordPress plugin that connects Ninja Forms to Monday.com boards via API.
Features
- Multiple form-to-board connections - Connect different forms to different boards
- One form to multiple boards - Send the same form data to multiple Monday.com boards
- Field key mapping - More maintainable than using field IDs
- Dynamic date/time values - Insert current date, time, or timestamp automatically
- Static text values - Set columns to predefined text values
- Group ID support - Specify which group/section items are added to
- Active/inactive toggle - Enable or disable connections without deleting them
- Debug logging - Troubleshoot issues with detailed logs
- Visual dashboard - Manage all connections from one place
- AJAX field key loader - Easily see available field keys when mapping
Installation
- Upload the
monday-nf-integrationfolder to/wp-content/plugins/ - Activate the plugin through the 'Plugins' menu in WordPress
- Go to Monday.com NF menu in WordPress admin
- Add your first connection
Requirements
- WordPress 5.0 or higher
- PHP 7.0 or higher
- Ninja Forms plugin (active)
- Monday.com account with API access
File Structure
monday-nf-integration/
├── monday-nf-integration.php # Main plugin file
├── README.md # This file
├── uninstall.php # Cleanup script
├── assets/
│ ├── css/
│ │ └── admin-style.css # Admin styles
│ └── js/
│ └── admin-script.js # Admin JavaScript
├── includes/
│ ├── class-monday-nf-connector.php # Main plugin class
│ ├── class-monday-nf-admin.php # Admin interface
│ ├── class-monday-nf-connection.php # Connection CRUD operations
│ ├── class-monday-nf-api.php # Monday.com API handler
│ └── class-monday-nf-submission.php # Form submission processor
└── views/
├── admin-dashboard.php # Dashboard template
├── admin-connection-form.php # Add/Edit form template
└── admin-help.php # Help section
Usage
Creating a Connection
- Navigate to Monday.com NF → Add Connection
- Enter a connection name (e.g., "Contact Form to Sales Board")
- Select which Ninja Form to connect
- Enter your Monday.com API token
- Enter your Monday.com Board ID
- (Optional) Enter your Monday.com Group ID
- Map form field keys to Monday.com column IDs using JSON format
- Check "Active" to enable the connection
- Save
Finding Your API Token
- Log into Monday.com
- Click your profile picture
- Go to Admin → API
- Copy your API token
Finding Your Board ID
The Board ID is in your board's URL:
https://yourcompany.monday.com/boards/1234567890
^^^^^^^^^^
Board ID
Finding Your Group ID (Optional)
- Open your Monday.com board
- Right-click on the group/section title you want to use
- Select "Copy group link"
- The Group ID is in the URL after
group_id=
Example: ...?group_id=topics - the Group ID is "topics"
Note: If you don't specify a Group ID, items will be added to the default/first group on the board.
Field Mapping
Basic Field Mapping
Map form field keys to Monday.com column IDs:
{
"first_name": "name",
"email": "email",
"phone": "phone",
"message": "text"
}
Left side = Ninja Forms field keys Right side = Monday.com column IDs
Using Field Keys
Click "Show field keys for selected form" to see all available field keys for your form. This makes mapping much easier!
Advanced Features
Dynamic Date/Time Values
Insert current date and time automatically using special placeholders:
{
"first_name": "name",
"email": "email",
"message": "text",
"{{current_date}}": "submission_date",
"{{current_datetime}}": "submitted_at"
}
Available placeholders:
| Placeholder | Output | Use Case |
|---|---|---|
{{current_date}} |
2024-02-11 | Monday.com date columns |
{{current_time}} |
14:30:45 | Time tracking |
{{current_datetime}} |
2024-02-11 14:30:45 | Full timestamp |
{{current_timestamp}} |
1707662445 | Unix timestamp |
{{current_year}} |
2024 | Year tracking |
{{current_month}} |
02 | Month tracking |
{{current_day}} |
11 | Day tracking |
Example with date tracking:
{
"company_name": "name",
"contact_email": "email",
"inquiry": "text",
"{{current_date}}": "date_received",
"{{current_year}}": "year"
}
Static Text Values
Set Monday.com columns to predefined text values that don't come from the form:
{
"first_name": "name",
"email": "email",
"\"Website Form\"": "source",
"static:New Lead": "status",
"'High'": "priority"
}
Three ways to define static values:
- Double quotes:
"Static Text" - Single quotes:
'Static Text' - Static prefix:
static:Static Text
Common use cases:
- Lead Source:
"\"Website\"": "source"- Track where leads come from - Status:
"static:New": "status"- Set initial status for all items - Priority:
"'High'": "priority"- Assign priority levels - Department:
"static:Sales": "department"- Route to specific teams - Type:
"\"Contact Request\"": "type"- Categorize submissions
Example - Complete lead tracking:
{
"name": "name",
"email": "email",
"company": "company_name",
"message": "text",
"\"Website Contact Form\"": "source",
"static:New": "status",
"'High'": "priority",
"{{current_date}}": "received_date"
}
This will:
- Map form fields to Monday columns
- Set "source" to "Website Contact Form"
- Set "status" to "New"
- Set "priority" to "High"
- Insert current date in "received_date"
Use Cases
Example 1: Different Forms to Different Boards
- Contact Form → Sales Board
- Job Application → HR Board
- Support Request → Customer Support Board
Example 2: One Form to Multiple Boards
Create two connections:
- Contact Form → Sales Board
- Contact Form → Marketing Board
Both connections will fire when the contact form is submitted!
Example 3: Advanced Lead Tracking
{
"full_name": "name",
"email_address": "email",
"phone_number": "phone",
"company_name": "company",
"message": "inquiry",
"\"Website - Contact Page\"": "source",
"static:New Lead": "status",
"'To Review'": "stage",
"{{current_date}}": "date_submitted",
"{{current_datetime}}": "timestamp"
}
Example 4: Support Request with Priority
{
"customer_name": "name",
"customer_email": "email",
"issue_description": "description",
"static:Support Ticket": "type",
"'High'": "priority",
"\"Website Form\"": "source",
"{{current_datetime}}": "received_at"
}
Development
Adding New Features
- New API methods: Edit
includes/class-monday-nf-api.php - New admin pages: Edit
includes/class-monday-nf-admin.phpand add view inviews/ - New data fields: Edit
includes/class-monday-nf-connection.php - New field formatting: Edit
includes/class-monday-nf-submission.php - New placeholders: Add to
get_special_value()inclass-monday-nf-submission.php
Testing
- Enable debug logging in your connection settings
- Submit a test form
- Check
/wp-content/debug.logfor detailed information
You'll see entries like:
Monday NF Connector [Test] - Field Key: first_name, Value: John
Monday NF Connector [Test] - Special Value: {{current_date}} = 2024-02-11
Monday NF Connector [Test] - Static Value: "Website Form" = Website Form
Debug Log Location
Enable WordPress debugging by adding to wp-config.php:
define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);
Then check: /wp-content/debug.log
Troubleshooting
Form not sending to Monday.com?
- Check connection is Active
- Enable Debug Logging
- Submit test form
- Check debug log for errors
- Verify API token and Board ID are correct
"Invalid field mapping JSON" error?
Your JSON must be valid. Common issues:
- Missing quotes around keys/values
- Missing commas between entries
- Extra comma after last entry
- Unescaped quotes in static values (use
\"inside quotes)
Valid:
{
"name": "name",
"\"Static Text\"": "column"
}
Invalid:
{
"name": "name",
""Static Text"": "column"
}
Field values not appearing?
- Check field keys match exactly (case-sensitive)
- Use "Show field keys" button to verify
- Check Monday.com column IDs are correct
- Enable debug logging to see what's being sent
Placeholders not working?
- Ensure placeholder is wrapped in
{{and}} - Check spelling (case-insensitive but must match exactly)
- Enable debug logging to see if placeholder is recognized
Static values not appearing?
- Ensure text is properly quoted or prefixed with
static: - Check for escaped quotes inside values
- Enable debug logging to verify static value extraction
Security
- All data is sanitized before saving
- Nonce verification on all actions
- Capability checks (requires
manage_options) - API tokens stored securely in WordPress options
- No sensitive data logged unless debug mode is enabled