This user manual provides step-by-step instructions for implementing and using the Procore connector. The Procore connector for MuleSoft enables seamless integration between MuleSoft applications and Procore’s construction project management platform. This connector provides a comprehensive set of operations for creating, managing, and interacting with construction projects through Procore’s REST API.
Procore is a leading construction project management platform that helps construction professionals manage projects, resources, and financials from planning to closeout. The platform provides tools for project management, quality and safety, financial management, and field productivity.
Component | Version |
Mule Runtime | 4.9.6 or higher |
Java | 17 |
Anypoint Studio | 7.x or higher |
Procore API | v1.0 |
Before you can install the Procore Connector, ensure you have the following:
Add the Procore connector dependency to your project’s pom.xml:
<dependency> <groupId>com.procore.integrations</groupId> <artifactId>procore</artifactId> <version>1.0.0</version> <classifier>mule-plugin</classifier> </dependency>
Create a properties file (src/main/resources/properties/dev.properties) with your configuration:
# HTTP Listener Configuration http.listener.host=0.0.0.0 http.listener.port=8081 # Procore OAuth Configuration procore.config.oauth.consumer_key=your-consumer-key procore.config.oauth.consumer_secret=your-consumer-secret procore.config.oauth.callback_path=/mule/callback procore.config.oauth.authorize_path=/authorize-procore procore.config.oauth.external_callback_path=http://localhost:8081/mule/callback
The Procore Connector requires configuration for both the HTTP listener and OAuth authentication.
<http:listener-config name="HTTP_Listener_config" doc:name="HTTP Listener config"> <http:listener-connection host="${http.listener.host}" port="${http.listener.port}" /> </http:listener-config>
<procore:config name="Procore_Config" doc:name="Procore Config" doc:id="8c4f73ce-b817- 4f65-8eae-c6d04dbd53b4"> <procore:connection > <procore:oauth-authorization-code consumerKey="${procore.config.oauth.consumer_key}" consumerSecret="${procore.config.oauth.consumer_secret}" /> <procore:oauth-callback-config listenerConfig="HTTP_Listener_config" callbackPath="${procore.config.oauth.callback_path}" authorizePath="${procore.config.oauth.authorize_path}" externalCallbackUrl="${procore.config.oauth.external_callback_path}" /> </procore:connection> </procore:config>
Create separate property files for different environments:
http.listener.host=0.0.0.0 http.listener.port=8081 procore.config.oauth.external_callback_path=http://localhost:8081/mule/callback
http.listener.host=0.0.0.0 http.listener.port=8081 procore.config.oauth.external_callback_path=https://staging.yourdomain.com/mule/callback
http.listener.host=0.0.0.0 http.listener.port=8081 procore.config.oauth.external_callback_path=https://yourdomain.com/mule/callback
The Create Project operation allows you to create new construction projects in Procore.
PARAMETER | TYPE | REQUIRED | DESCRIPTION |
Company ID | String | Yes | The Procore Company ID for the project. |
Name | String | Yes | The name of the project. |
Code | String | No | The project code. For example, 'NOB-2024'. |
Description | String | No | A description of the project. |
Active | Boolean | No | Indicates whether the project is active (default: true). |
Project Number | String | No | The project number. For example, 'A-2'. |
Accounting Project Number | String | No | The accounting project number. |
Store Number | String | No | The project store number. |
Designated Market Area | String | No | The market area designated for the project. |
PARAMETER | TYPE | REQUIRED | DESCRIPTION |
Address | String | No | The project address. |
City | String | No | The city where the project is located. |
State Code | String | No | The state code (ISO-3166 Alpha-2 format). For example, 'CA' or 'NY'. |
Country Code | String | No | The country code (ISO-3166 Alpha-2 format, default: US). |
ZIP | String | No | The ZIP/postal code. |
County | String | No | The county where the project is located. |
Latitude | String | No | The latitude coordinate of the project. |
Longitude | String | No | The longitude coordinate of the project. |
Time Zone | String | No | The timezone where the project is located. For example, 'America/Los_Angeles'. |
PARAMETER | TYPE | REQUIRED | DESCRIPTION |
Start Date | String | No | The date that the contract for the project is signed (YYYY-MM-DD). |
Completion Date | String | No | The date that all parties agree that the project meets substantial completion. |
Warranty Start Date | String | No | The warranty start date of the project. |
Warranty End Date | String | No | The warranty end date of the project. |
Estimated Start Date | String | No | The estimated start date of the project. |
Estimated Completion Date | String | No | The estimated completion date of the project. |
Override Start Date | String | No | Custom start date displayed on the Portfolio page. |
Override Start Date Check | Boolean | No | Enable use of override_start_date as Actual Start Date. |
Override End Date | String | No | Custom end date displayed on the Portfolio page. |
Override End Date Check | Boolean | No | Enable use of override_end_date as Projected Finish Date. |
PARAMETER | TYPE | REQUIRED | DESCRIPTION |
Total Value | Double | No | The total amount of construction work performed, planned, or put in place. |
Estimated Value | Double | No | The estimated value of the project. |
Square Feet | Double | No | The total square footage of the project. |
PARAMETER | TYPE | REQUIRED | DESCRIPTION |
Project Type ID | String | No | The project type identifier. |
Project Stage ID | String | No | The project stage identifier. |
Project Bid Type ID | String | No | The project bid type identifier. |
Project Owner Type ID | String | No | The project owner type identifier. |
Project Region ID | String | No | The project region identifier. |
Project Template ID | String | No | The project template identifier for standardization. |
Sector | String | No | The sector of a project. For example, 'Commercial'. |
Work Scope | String | No | The scope of work for a project. For example, 'New Construction'. |
Delivery Method | String | No | The delivery method of a project. For example, 'Design-Build'. |
PARAMETER | TYPE | REQUIRED | DESCRIPTION |
Office ID | String | No | The project office identifier. |
Program ID | String | No | The project program identifier. |
Department IDs | List<String> | No | The department IDs associated with the project. |
Parent Job ID | String | No | The project’s parent job identifier. |
PARAMETER | TYPE | REQUIRED | DESCRIPTION |
Phone | String | No | The telephone number of the project. |
Public Notes | String | No | The public notes for the project. |
Flag | String | No | The flag of the project. For example, 'URGENT'. |
PARAMETER | TYPE | REQUIRED | DESCRIPTION |
ERP Integrated | Boolean | No | Indicates whether the project will be ERP-integrated. |
Origin ID | String | No | External third-party identifier for the project. |
Origin Data | String | No | External third-party data string associated with the project. |
Origin Code | String | No | External third-party code associated with the project. |
PARAMETER | TYPE | REQUIRED | DESCRIPTION |
Enable Copy of Standard Cost Codes | Boolean | No | Enable copying default standard cost codes during creation (default: false). |
PARAMETER | TYPE | REQUIRED | DESCRIPTION |
Locale | String | No | The locale for the project. For example, 'en-US'. |
Image ID | String | No | The image identifier of the project. |
<procore:create-project doc:name="Create Project" doc:id="a381945f-95c0-480e-87ed-01528b64e818" config-ref="Procore_Config" companyId="#[payload.company_id]" name="#[payload.name]" address="#[payload.address]" city="#[payload.city]" stateCode="#[payload.state_code]" countryCode="#[payload.country_code]" zip="#[payload.zip]" latitude="#[payload.latitude]" longitude="#[payload.longitude]" startDate="#[payload.start_date]" completionDate="#[payload.completion_date]" warrantyStartDate="#[payload.warranty_start_date]" warrantyEndDate="#[payload.warranty_end_date]" code="#[payload.code]" description="#[payload.description]" totalValue="#[payload.total_value]" estimatedValue="#[payload.estimated_value]" estimatedStartDate="#[payload.estimated_start_date]" estimatedCompletionDate="#[payload.estimated_completion_date]" squareFeet="#[payload.square_feet]" phone="#[payload.phone]" projectNumber="#[payload.project_number]" storeNumber="#[payload.store_number]" accountingProjectNumber="#[payload.accounting_project_number]" locale="#[payload.locale]" timeZone="#[payload.time_zone]" officeId="#[payload.office_id]" parentJobId="#[payload.parent_job_id]" programId="#[payload.program_id]" projectStageId="#[payload.project_stage_id]" projectBidTypeId="#[payload.project_bid_type_id]" projectTypeId="#[payload.project_type_id]" projectOwnerTypeId="#[payload.project_owner_type_id]" projectRegionId="#[payload.project_region_id]" projectTemplateId="#[payload.project_template_id]" imageId="#[payload.image_id]" flag="#[payload.flag]" publicNotes="#[payload.public_notes]" departmentIds="#[payload.department_ids]" originId="#[payload.origin_id]" originData="#[payload.origin_data]" designatedMarketArea="#[payload.designated_market_area]" sector="#[payload.sector]" workScope="#[payload.work_scope]" deliveryMethod="#[payload.delivery_method]" active="#[payload.active]" erpIntegrated="#[payload.erp_integrated]" enableCopyOfStandardCostCodes="#[payload.enable_copy_of_standard_cost_codes]" originCode="#[payload.origin_code]" overrideStartDate="#[payload.override_start_date]" overrideStartDateCheck="#[payload.override_start_date_check]" overrideEndDate="#[payload.override_end_date]" overrideEndDateCheck="#[payload.override_end_date_check]" />
{ "company_id": "562949953437078", "name": "MuleTest Cloud 9 - 31", "address": "123 Main St", "city": "Anytown", "code": "P123", "country_code": "US", "description": "This is mule test project", "start_date": "2025-01-01", "completion_date": "2025-12-31", "total_value": "1000000", "warranty_start_date": "2025-01-01", "warranty_end_date": "2026-01-01", "flag": "1", "phone": "123-456-7890", "project_number": "P3423", "public_notes": "Public Notes", "project_stage_id": "3", "square_feet": "1000", "state_code": "CA", "time_zone": "US/Pacific", "zip": "12345", "parent_job_id": "562949955019589", "program_id": "562949953512759", "project_bid_type_id": "562949953465028", "project_type_id": "562949953482050", "project_owner_type_id": "562949953439322", "project_region_id": "562949953468817", "office_id": "562949953440611", "override_start_date": "2025-01-01", "override_start_date_check": true, "override_end_date": "2026-12-31", "override_end_date_check": true, "department_ids": [ "562949953494810", "562949953495650" ], "estimated_value": "1000000", "estimated_start_date": "2025-01-01", "estimated_completion_date": "2025-12-31", "store_number": "123", "accounting_project_number": "123", "designated_market_area": "Market Area", "erp_integrated": false, "latitude": "37.7749", "longitude": "-124.5924746", "locale": "en", "enable_copy_of_standard_cost_codes": false, "sector": "assembly", "work_scope": "new_construction", "delivery_method": "construction_manager_as_agent_owners_rep", "active": true }
The Update Project operation allows you to modify existing construction projects in Procore.
PARAMETER | TYPE | REQUIRED | DESCRIPTION |
Company ID | String | Yes | The Procore Company ID for the project. |
Project ID | String | Yes | The unique identifier of the project to be updated. |
PARAMETER | TYPE | REQUIRED | DESCRIPTION |
Name | String | No | The updated name of the project. |
Code | String | No | The updated project code. For example, 'NOB-2024'. |
Description | String | No | The updated description of the project. |
Active | Boolean | No | Indicates whether the project is active (default: true). |
Project Number | String | No | The updated project number. |
Accounting Project Number | String | No | The updated accounting project number. |
Store Number | String | No | The updated project store number. |
Designated Market Area | String | No | The updated market area designated for the project. |
PARAMETER | TYPE | REQUIRED | DESCRIPTION |
Address | String | No | The updated project address. |
City | String | No | The updated city where the project is located. |
State Code | String | No | The updated state code (ISO-3166 Alpha-2 format). For example, 'CA' or 'NY'. |
Country Code | String | No | The updated country code (ISO-3166 Alpha-2 format, default: US). |
ZIP | String | No | The updated ZIP/postal code. |
County | String | No | The county where the project is located. |
Latitude | String | No | The updated latitude coordinate of the project. |
Longitude | String | No | The updated longitude coordinate of the project. |
Time Zone | String | No | The updated timezone where the project is located. For example, 'America/Los_Angeles'. |
PARAMETER | TYPE | REQUIRED | DESCRIPTION |
Start Date | String | No | The updated date that the contract for the project is signed (YYYY-MM-DD). |
Completion Date | String | No | The updated date that all parties agree that the project meets substantial completion. |
Warranty Start Date | String | No | The updated warranty start date of the project. |
Warranty End Date | String | No | The updated warranty end date of the project. |
Estimated Start Date | String | No | The updated estimated start date of the project. |
Estimated Completion Date | String | No | The updated estimated completion date of the project. |
PARAMETER | TYPE | REQUIRED | DESCRIPTION |
Total Value | Double | No | The updated total amount of construction work performed, planned, or put in place. |
Estimated Value | Double | No | The updated estimated value of the project. |
Square Feet | Double | No | The updated total square footage of the project. |
PARAMETER | TYPE | REQUIRED | DESCRIPTION |
Project Type ID | String | No | The updated project type identifier. |
Project Stage ID | String | No | The updated project stage identifier. |
Project Bid Type ID | String | No | The updated project bid type identifier. |
Project Owner Type ID | String | No | The updated project owner type identifier. |
Project Region ID | String | No | The updated project region identifier. |
Project Template ID | String | No | The updated project template identifier for standardization. |
Sector | String | No | The updated sector of a project. For example, 'Commercial'. |
Work Scope | String | No | The updated scope of work for a project. For example, 'New Construction'. |
Delivery Method | String | No | The updated delivery method of a project. For example, 'Design-Build'. |
PARAMETER | TYPE | REQUIRED | DESCRIPTION |
Office ID | String | No | The updated project office identifier. |
Program ID | String | No | The updated project program identifier. |
Department IDs | List<String> | No | The updated department IDs associated with the project. |
Parent Job ID | String | No | The updated project’s parent job identifier. |
PARAMETER | TYPE | REQUIRED | DESCRIPTION |
Phone | String | No | The updated telephone number of the project. |
Fax | String | No | The fax number for the project. |
Public Notes | String | No | The updated public notes for the project. |
Flag | String | No | The updated flag of the project. For example, 'URGENT'. |
PARAMETER | TYPE | REQUIRED | DESCRIPTION |
ERP Integrated | Boolean | No | Indicates whether the project will be ERP-integrated. |
Origin ID | String | No | The updated external third-party identifier for the project. |
Origin Data | String | No | The updated external third-party data string associated with the project. |
Origin Code | String | No | The updated external third-party code associated with the project. |
PARAMETER | TYPE | REQUIRED | DESCRIPTION |
Standard Cost Code List ID | String | No | The identifier for the Standard Cost Code List. |
PARAMETER | TYPE | REQUIRED | DESCRIPTION |
Locale | String | No | The updated locale for the project. |
Image ID | String | No | The updated image identifier of the project. |
<procore:update-project doc:name="Update Project" doc:id="3e28c0b7-77af-4a97-a809-a4a6a63d7bd7" config-ref="Procore_Config" companyId="#[payload.company_id]" name="#[payload.name]" active="false" address="#[payload.address]" city="#[payload.city]" countryCode="#[payload.country_code]" description="#[payload.description]" startDate="#[payload.start_date]" completionDate="#[payload.completion_date]" totalValue="#[payload.total_value]" warrantyStartDate="#[payload.warranty_start_date]" warrantyEndDate="#[payload.warranty_end_date]" flag="#[payload.flag]" locale="#[payload.locale]" phone="#[payload.phone]" fax="#[payload.fax]" publicNotes="#[payload.public_notes]" projectStageId="#[payload.project_stage_id]" squareFeet="#[payload.square_feet]" stateCode="#[payload.state_code]" timeZone="#[payload.time_zone]" zip="#[payload.zip]" parentJobId="#[payload.parent_job_id]" projectBidTypeId="#[payload.project_bid_type_id]" projectOwnerTypeId="#[payload.project_owner_type_id]" projectRegionId="#[payload.project_region_id]" originId="#[payload.origin_id]" originData="#[payload.origin_data]" originCode="#[payload.origin_code]" sector="#[payload.sector]" workScope="#[payload.work_scope]" deliveryMethod="#[payload.delivery_method]" projectTemplateId="#[payload.project_template_id]" projectNumber="#[payload.project_number]" programId="#[payload.program_id]" storeNumber="#[payload.store_number]" accountingProjectNumber="#[payload.accounting_project_number]" designatedMarketArea="#[payload.designated_market_area]" estimatedValue="#[payload.estimated_value]" estimatedStartDate="#[payload.estimated_start_date]" estimatedCompletionDate="#[payload.estimated_completion_date]" projectTypeId="#[payload.project_type_id]" imageId="#[payload.image_id]" officeId="#[payload.office_id]" projectId="#[payload.project_id]" county="#[payload.county]" standardCostCodeListId="#[payload.standard_cost_code_list_id]" departmentIds="#[payload.department_ids]" />
{ "company_id": "562949953437078", "project_id": "562949955035825", "active": true, "address": "123 Main St Updated", "city": "Anytown Updated", "country_code": "US", "county": "Santa Barbara County updated", "description": "This is mule test project updated", "erp_integrated": true, "standard_cost_code_list_id": "562949953436338", "start_date": "2025-02-01", "completion_date": "2025-12-30", "total_value": 100001, "warranty_start_date": "2025-02-01", "warranty_end_date": "2026-01-30", "fax": "0161 999 8888", "flag": "1", "locale": "en", "name": "MuleTest9 - 17 Updated", "office_id": 562949953582263, "phone": "123-456-7890", "project_number": "P3424", "public_notes": "Public Notes Updated", "project_stage_id": 562949953421313, "square_feet": 1001, "state_code": "AZ", "time_zone": "US/Mountain", "zip": "54321", "parent_job_id": 562949955019589, "program_id": 562949953520454, "project_bid_type_id": 562949953465027, "project_type_id": 562949953482049, "project_owner_type_id": 562949953439321, "project_region_id": 562949953470887, "project_template_id": null, "department_ids": [ 562949953495657, 562949953495655 ], "estimated_value": 1000001, "estimated_start_date": "2025-02-01", "estimated_completion_date": "2025-12-30", "store_number": "1234", "accounting_project_number": "1234", "designated_market_area": "Southeast", "sector": "auto_service", "work_scope": "renovation_alteration", "delivery_method": "integrated_project_delivery" }
The Procore Connector uses OAuth 2.0 authorization code flow for secure authentication.
Follow these steps using the Procore Developer documentation to create your OAuth application:
<procore:config name="Procore_Config" doc:name="Procore Config"> <procore:connection> <procore:oauth-authorization-code consumerKey="${procore.config.oauth.consumer_key}" consumerSecret="${procore.config.oauth.consumer_secret}"/> <procore:oauth-callback-config listenerConfig="HTTP_Listener_config" callbackPath="/mule/callback" authorizePath="/authorize-procore" externalCallbackUrl="http://localhost:8081/mule/callback" /> </procore:connection> </procore:config>
The Procore Connector provides comprehensive error handling with specific error types:
ERROR TYPE | CODE | DESCRIPTION |
BAD_REQUEST | 400 | Invalid request parameters or malformed data. |
UNAUTHORIZED | 401 | Invalid or expired authentication credentials. |
FORBIDDEN | 403 | Insufficient permissions to access the resource. |
NOT_FOUND | 404 | The requested resource was not found. |
CONFLICT | 409 | The request conflicts with the current state of the resource. |
TOO_MANY_REQUESTS | 429 | API rate limit has been exceeded. |
CONNECTIVITY | N/A | Unable to connect to Procore services. |
UNEXPECTED_ERROR | N/A | Unknown or unclassified errors. |
Add the following logger configuration to enable debug logging:
<logger name="com.procore.mule" level="DEBUG"/>
OPERATION | METHOD | ENDPOINT | DESCRIPTION |
Create Project | POST | /rest/v1.0/projects | Create a new project |
Update Project | PATCH | /rest/v1.0/projects/{id} | Update an existing project |
TYPE | DESCRIPTION | EXAMPLE |
String | Text values | "Project Name" |
Boolean | True/false values | true |
Double | Decimal numbers | 1000000.0 |
Integer | Whole numbers | 50000 |
List<String> | Array of strings | ["dept1", "dept2"] |
Date | Date values | "2024-01-01" |
TERM | DEFINITION |
Procore | Construction project management platform. |
OAuth 2.0 | Authorization protocol for secure API access. |
Company ID | Unique identifier for a Procore company. |
Project ID | Unique identifier for a Procore project. |
Standard Cost Codes | Predefined cost categories for construction projects. |
Custom Fields | User-defined fields for project customization. |
Procore Error Codes | Specific error types that are defined by the Procore connector for error handling. |
BAD_REQUEST | Error indicating invalid request parameters or malformed data. |
UNAUTHORIZED | Error indicating invalid or expired authentication credentials. |
FORBIDDEN | Error indicating insufficient permissions to access a resource. |
NOT_FOUND | Error indicating the requested resource was not found. |
CONFLICT | Error indicating request conflicts with current resource state. |
TOO_MANY_REQUESTS | Error indicating API rate limit has been exceeded. |
CONNECTIVITY | Error indicating inability to connect to Procore services. |
UNEXPECTED_ERROR | Generic error for unknown or unclassified errors. |