CONNECT APP
Build with Procore
Productivity
- OAuth
MCP
Give your agent Procore tools
Every Procore action is exposed as an MCP tool on Pipedream's remote server. Point a client at it with your end user's ID and Connect resolves that user's Procore account for each tool call — you store no tokens.
// accessToken: mint a short-lived token with the Connect SDK — see the MCP guide
const transport = new StreamableHTTPClientTransport(
new URL("https://remote.mcp.pipedream.net/v3"),
{
requestInit: {
headers: {
Authorization: `Bearer ${accessToken}`,
"x-pd-project-id": "{project_id}",
"x-pd-environment": "production",
"x-pd-external-user-id": "{external_user_id}", // any stable ID for this user in your system
"x-pd-app-slug": "procore",
},
},
},
)
const mcp = new Client({ name: "my-agent", version: "1.0.0" })
await mcp.connect(transport)
const { tools } = await mcp.listTools()
// e.g. run Create Incident:
const result = await mcp.callTool({
name: "procore-create-incident",
arguments: {
companyId: 10,
projectId: 10,
},
})# access_token: mint a short-lived token with the Connect SDK — see the MCP guide
headers = {
"Authorization": f"Bearer {access_token}",
"x-pd-project-id": "{project_id}",
"x-pd-environment": "production",
"x-pd-external-user-id": "{external_user_id}", # any stable ID for this user in your system
"x-pd-app-slug": "procore",
}
async with streamablehttp_client("https://remote.mcp.pipedream.net/v3", headers=headers) as (read, write, _):
async with ClientSession(read, write) as session:
await session.initialize()
tools = await session.list_tools()
# e.g. run Create Incident:
result = await session.call_tool("procore-create-incident", {
"companyId": 10,
"projectId": 10,
})API PROXY
Call the Procore API directly
For an endpoint with no pre-built tool, the Connect proxy forwards your request to the Procore API with the connected user's credentials attached. You store no tokens and write no refresh logic.
const resp = await pd.proxy.get({
externalUserId: "{external_user_id}", // any stable ID for this user in your system
accountId: "apn_xxxxxxx",
url: "https://api.procore.com/rest/v1.0/me",
})
// Any allowed Procore endpoint works here. Pipedream attaches the
// connected account's credentials to the outgoing request.# The path segment is the target URL, URL-safe base64 encoded:
# https://api.procore.com/rest/v1.0/me
curl "https://api.pipedream.com/v1/connect/{project_id}/proxy/aHR0cHM6Ly9hcGkucHJvY29yZS5jb20vcmVzdC92MS4wL21l?external_user_id={external_user_id}&account_id=apn_xxxxxxx" \
-H "Authorization: Bearer {access_token}" \
-H "x-pd-environment: production"SDK
Run Procore actions from your backend
Connect a user's Procore account once, then run Create Incident on their behalf from your own code — TypeScript, Python, or plain HTTP.
import { PipedreamClient } from "@pipedream/sdk"
const pd = new PipedreamClient({
projectId: process.env.PIPEDREAM_PROJECT_ID!,
clientId: process.env.PIPEDREAM_CLIENT_ID!,
clientSecret: process.env.PIPEDREAM_CLIENT_SECRET!,
projectEnvironment: "production",
})
const result = await pd.actions.run({
id: "procore-create-incident",
externalUserId: "{external_user_id}", // any stable ID for this user in your system
configuredProps: {
procore: { authProvisionId: "apn_xxxxxxx" },
companyId: 10,
projectId: 10,
},
})from pipedream import Pipedream
pd = Pipedream(
client_id="{oauth_client_id}",
client_secret="{oauth_client_secret}",
project_id="{project_id}",
project_environment="production",
)
result = pd.actions.run(
id="procore-create-incident",
external_user_id="{external_user_id}", # any stable ID for this user in your system
configured_props={
"procore": {"authProvisionId": "apn_xxxxxxx"},
"companyId": 10,
"projectId": 10,
},
)curl -X POST https://api.pipedream.com/v1/connect/{project_id}/actions/run \
-H "Content-Type: application/json" \
-H "X-PD-Environment: production" \
-H "Authorization: Bearer {access_token}" \
-d '{
"external_user_id": "{external_user_id}",
"id": "procore-create-incident",
"configured_props": {
"procore": { "authProvisionId": "apn_xxxxxxx" },
"companyId": 10,
"projectId": 10
}
}'TOOLS
Procore actions
On-demand operations your product or agent can configure and run on behalf of a connected user.
-
Create Incident
actionCreate a new incident. See the documentation.Writev0.0.3 -
Create Manpower Log
actionCreate a new manpower log. See the documentation.Writev0.0.3 -
Create RFI
actionCreate a new RFI. See the documentation.Writev0.0.2 -
Create Submittal
actionCreate a new submittal. See the documentation.Writev0.0.2 -
Create Timesheet
actionCreate a new timesheet. See the documentation.Writev0.0.2 -
List Company ID Options
actionRetrieves available options for the Company ID field.Read-onlyv0.0.1
EVENTS
Procore triggers
Event sources your backend can deploy for users and receive through a webhook.
-
Budget Snapshot Event (Instant)
triggerEmits an event each time a Budget Snapshot is created, updated, or deleted in a project.Instantv0.0.2 -
Commitment Change Order Event (Instant)
triggerEmits an event each time a Commitment Change Order is created, updated, or deleted in a project.Instantv0.0.2 -
New Budget Snapshot Event (Instant)
triggerEmit new event when a new budget snapshot event is created. See the documentation.Instantv0.0.1 -
New Change Order Package Event (Instant)
triggerEmit new event when a new change order package event is created. See the documentation.Instantv0.0.1 -
New Commitment Change Order Event (Instant)
triggerEmit new event when a new commitment change order event is created. See the documentation.Instantv0.0.1 -
New Event (Instant)
triggerEmits an event for each webhook notification.Instantv0.0.2 -
New Event (Instant)
triggerEmit new event depending on the resource name selected. See the documentation.Instantv0.0.1 -
New Prime Contract Event (Instant)
triggerEmit new event when a new prime contract event is created. See the documentation.Instantv0.0.1 -
New Purchase Order Event (Instant)
triggerEmit new event when a new purchase order event is created. See the documentation.Instantv0.0.1 -
New RFI Event (Instant)
triggerEmit new event when a new RFI event is created. See the documentation.Instantv0.0.1 -
New Submittal Event (Instant)
triggerEmit new event when a new submittal event is created. See the documentation.Instantv0.0.1 -
New Timecard Entry Event (Instant)
triggerEmit new event when a new timecard entry is created. See the documentation.Instantv0.0.1 -
Prime Contract Change Order Event (Instant)
triggerEmits an event each time a Prime Contract Change Order is created, updated, or deleted in a project.Instantv0.0.2 -
Prime Contract Event(Instant)
triggerEmits an event each time a Prime Contract is created, updated, or deleted in a project.Instantv0.0.2 -
Purchase Order Event (Instant)
triggerEmits an event each time a Purchase Order is created, updated, or deleted in a project.Instantv0.0.2 -
RFI Event (Instant)
triggerEmits an event each time a RFI is created, updated, or deleted in a project.Instantv0.0.2 -
Submittal Event (Instant)
triggerEmits an event each time a Submittal is created, updated, or deleted in a project.Instantv0.0.2
MULTI-APP
Use Procore with other popular apps
Most products don't stop at one integration. Pair Procore with the other apps your users rely on, and ship use cases that span both.
- App slug
- procore
- Authentication
- OAuth
- Categories
- Productivity
- Actions
- 6
- Triggers
- 17
- API proxy
- Available