# Find Records — Salesforce

> Retrieve selected fields for records of any Salesforce object, either specific records by ID or the most recent ones. Use this as the general-purpose record reader when no object-specific action fits - prefer List Cases for cases or Get…

- Key: `salesforce_rest_api-find-records`
- Type: Action (Read-only)
- Version: 0.3.3
- App: Salesforce (`salesforce_rest_api`) — https://pipedream.com/apps/salesforce-rest-api.md
- This page (HTML): https://pipedream.com/apps/salesforce-rest-api/actions/find-records
- Hints: read-only · open-world
- Source: https://github.com/PipedreamHQ/pipedream/blob/master/components/salesforce_rest_api/actions/find-records/find-records.mjs

## Description

Retrieve selected fields for records of any Salesforce object, either specific records by ID or the most recent ones. Use this as the general-purpose record reader when no object-specific action fits - prefer **List Cases** for cases or **Get Record by ID** for a single known record. Use **List Objects** to discover object types and **List Object Fields** to discover field names. For example, `SObject Type` `Account` with `Fields to Obtain` `Id, Name` and `Limit` `25` returns the 25 most recently created accounts. Leaving `Record ID(s)` empty returns recent records, not every record - Salesforce sends one batch, so set `Limit` and use **SOQL Query** when you need everything. Newest-first ordering needs `CreatedDate`, so results are unordered on the few object types that lack it. [See the documentation](https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/resources_query.htm)

## Props

| Prop | Type | Required | Description |
|---|---|---|---|
| `sobjectType` | `string` | Yes | The type of object to obtain records of, e.g. Account. Use List Objects to discover the object types in this org. Options are loaded from the connected account. |
| `fieldsToObtain` | `string[]` | Yes | The fields to return, e.g. Id, Name. Use List Object Fields to discover field names for the selected object. Include Id if you plan to act on the records afterwards. Options are loaded from the connected account. |
| `recordIds` | `string[]` | No | The specific record(s) to retrieve (15- or 18-character Salesforce IDs). Leave empty to retrieve the most recent records of this object type. Options are loaded from the connected account. |
| `limit` | `integer` | No | The maximum number of records to return. Valid values are integers from 1 through 1000. Omit to return every record Salesforce sends in one batch. |

## Run it

**MCP**

```ts
import { Client } from "@modelcontextprotocol/sdk/client/index.js"
import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js"
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 accessToken = await pd.rawAccessToken

const transport = new StreamableHTTPClientTransport(
  new URL("https://remote.mcp.pipedream.net/v3"),
  {
    requestInit: {
      headers: {
        Authorization: `Bearer ${accessToken}`,
        "x-pd-project-id": process.env.PIPEDREAM_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": "salesforce_rest_api",
      },
    },
  },
)

const mcp = new Client({ name: "my-agent", version: "1.0.0" })
await mcp.connect(transport)

const { tools } = await mcp.listTools()

// listTools() hands your model this tool's input schema, so it can
// fill the arguments itself:
const result = await mcp.callTool({
  name: "salesforce_rest_api-find-records",
  arguments: {
    sobjectType: "SObject Type",
    fieldsToObtain: ["Fields to Obtain"],
  },
})
```

**TypeScript**

```ts
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: "salesforce_rest_api-find-records",
  externalUserId: "{external_user_id}", // any stable ID for this user in your system
  configuredProps: {
    salesforce_rest_api: { authProvisionId: "apn_xxxxxxx" },
    sobjectType: "SObject Type",
    fieldsToObtain: ["Fields to Obtain"],
  },
})

console.log(result)
```

**cURL**

```bash
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": "salesforce_rest_api-find-records",
    "configured_props": {
      "salesforce_rest_api": { "authProvisionId": "apn_xxxxxxx" },
      "sobjectType": "SObject Type",
      "fieldsToObtain": ["Fields to Obtain"]
    }
  }'
```

---

- App: https://pipedream.com/apps/salesforce-rest-api.md · All apps: https://pipedream.com/apps
