---
title: Recipient Master Data Block
description: "The Recipient Master (RecipientMaster) Data Block in Assette is responsible for retrieving and constructing recipient-level data required for personalized content delivery and distribution workflows. This includes contact metadata, address information, delivery preferences, and recipient-account associations. The block supports integration with…"
url: "https://learn.assette.com/docs/recipient-master-data-block/"
updated: "2025-05-08"
category: Developers / Data Blocks / Data Blocks by Category / System Data Blocks
---

# Recipient Master Data Block

The Recipient Master (RecipientMaster) Data Block in Assette is responsible for retrieving and constructing recipient-level data required for personalized content delivery and distribution workflows. This includes contact metadata, address information, delivery preferences, and recipient-account associations. The block supports integration with either **[Assette's Recipient Upload](https://learn.assette.com/docs/import-recipients/)**or a **third-party CRM system** (e.g., Salesforce, Microsoft Dynamics) through configurable dependencies.

## General Info

| Field | Value |
| --- | --- |
| Name | RecipientMaster |
| Block Category | Interface |
| Block Type | Python |
| Output Type | Data Table |
| Editable | True |

## Dependencies

Depending on the desired data source (see [Switching Between Data Sources](https://learn.assette.com/docs/recipient-master-data-block/#switching-between-data-sources)), dependencies must be added or removed.

| Data Block Name | Description |
| --- | --- |
| CalculationEnv | Defines the imported Python modules and libraries (e.g., “import numpy as np”) [[Link](https://learn.assette.com/docs/calculation-env-data-block/)] |
| GetRecipientInfoSalesforce | Retrieves contact information from the Salesforce CRM system, leveraging Salesforce Object Query Language [[Link](https://learn.assette.com/docs/get-recipient-info-salesforce-data-blocks/)] |
| GetRecipientInfoSalesforceTransform |  |
| GetRecipientInfoLocal | Used to accessing recipient metadata from Assette’s internal data service. [[Link](https://learn.assette.com/docs/get-recipient-info-local-data-block/)] |
| GetRecipientsLocalDB | Retrieves active recipient records from the Assette's internal database. It provides details about delivery preferences, contact information, and localization settings for each recipient. [[Link](https://learn.assette.com/docs/get-recipients-localdb-data-block/)] |

## Switching Between Data Sources

The block supports two data source configurations:

1. **Local Database (Assette-hosted)**
2. **Third-party CRM (e.g., Salesforce)**

To switch between data sources, comment/uncomment the appropriate code snippet:

### Local Database

```
RecipientInfo_meta_data = pd.DataFrame(read("GetRecipientInfoLocal", params)["data"])
recipientsList = pd.DataFrame(read("GetRecipientsLocalDB",{})["data"])
```

### CRM Integration (Salesforce Example):

```
RecipientInfo_meta_data = pd.DataFrame(read("GetRecipientInfo", params)["data"])
recipientsList = pd.DataFrame(read("GetRecipient", params)["data"])
```

> **Note:** The block is designed to work with *any* CRM system—not just Salesforce—provided the dependent blocks return data in the expected structure.

## Parameter Handling

Parameters passed to the block are used to filter and refine the recipient list. Supported parameters include:

| Parameter Name | Description |
| --- | --- |
| `FirstName`, `LastName` | Filters recipients by name |
| `Email` | Filters based on recipient email |
| `Address1`, `Address2`, `City`, `State`, `Country`, `Zip` | Filters by address fields |
| `Company` | Filters recipients by associated company |
| `Code` | Filters recipients by unique code |
| `ID` (as `Param_ID`) | Filters by record ID |
| `AccountCode`, `OrganizationCode` | Used for CRM-specific lookups |

## Person and Address Construction

Each recipient is mapped to a nested `Person` dictionary, which includes personal details and a `PersonAddresses` list. The `build_person_new()` function handles this transformation, ensuring consistent formatting for downstream consumption.

### Sample structure:

```
{
  "RecipientCode": "...",
  "Person": {
    "FirstName": "...",
    "LastName": "...",
    "PersonAddresses": [{
      "Address1": "...",
      "City": "...",
      "State": "...",
      "Country": "..."
    }]
  }
}
```

## Default and Missing Field Handling

The block ensures structural consistency by injecting default values for any missing columns in the input dataset. Fields such as `IsEmailDeliveryEnabled`, `Language`, `EmailTO`, and others are initialized if not present in the source data.

## Filtering Logic

The output is further filtered using parameter-driven logic, including support for:

- Email match
- Name and address matching
- Company and recipient code filters
- Record ID matching

If specific filters are applied (e.g., `Email`, `FirstName`, or `Code`), only matching records will be included in the final output.

## Example Request

```
{}
```

## Example Response

```
{
  "ID": 101,
  "PersonID": 101,
  "IsEmailDeliveryEnabled": true,
  "EmailTO": "client@example.com",
  "FirstName": "John",
  "LastName": "Doe",
  "Address1": "123 Market Street",
  "City": "Boston",
  "State": "MA",
  "Country": "USA",
  "Zip": "02108",
  "Person": {
    "FirstName": "John",
    "LastName": "Doe",
    "PersonAddresses": [{
      "Address1": "123 Market Street",
      "City": "Boston",
      "State": "MA",
      "Country": "USA"
    }]
  }
}
```
