> ## Documentation Index
> Fetch the complete documentation index at: https://docs.nekt.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Órulo as a data source

> Bring data from Órulo to Nekt.

Órulo is a Brazilian real estate marketplace platform that connects developers, brokers, and real estate agencies. It provides a comprehensive catalog of properties (empreendimentos), including building details, typologies, units, images, floor plans, and commercial partners.

<img height="50" src="https://mintlify.s3.us-west-1.amazonaws.com/nekt/assets/logo/logo-orulo.png" />

## Configuring Órulo as a Source

In the [Sources](https://app.nekt.ai/sources) tab, click on the "Add source" button located on the top right of your screen. Then, select the Órulo option from the list of connectors.

Click **Next** and you'll be prompted to add your access.

### 1. Add account access

You'll need OAuth2 client credentials to connect. These are provided by Órulo when you sign a partnership contract.

The following configurations are available:

* **Client ID**: Your OAuth2 client ID provided by Órulo.

* **Client Secret**: Your OAuth2 client secret provided by Órulo.

* **Start Date**: (Optional) The earliest date from which records will be synced, in `DD/MM/YYYY HH:MM:SS` format.

Once you're done, click **Next**.

### 2. Select streams

Choose which data streams you want to sync. For faster extractions, select only the streams that are relevant to your analysis.

> Tip: The stream can be found more easily by typing its name.

Select the streams and click **Next**.

### 3. Configure data streams

Customize how you want your data to appear in your catalog. Select the desired layer, a folder to organize it, a name for each table, and the type of sync.

* **Layer**: choose between the existing layers on your catalog.
* **Folder**: a folder can be created inside the selected layer to group all tables.
* **Table name**: we suggest a name, but feel free to customize it.
* **Sync Type**: choose between INCREMENTAL and FULL\_TABLE.

Once you are done configuring, click **Next**.

### 4. Configure data source

Describe your data source for easy identification within your organization.

Define your [Trigger](https://docs.nekt.com/runs/scheduling-and-triggers) based on how often you need data updated.

Once you are ready, click **Next** to finalize the setup.

### 5. Check your new source

You can view your new source on the [Sources](https://app.nekt.ai/sources) page. If needed, manually trigger the source extraction by clicking on the arrow button.

<Warning>For you to be able to see it on your [Catalog](https://app.nekt.ai/catalog), you need at least one successful source run.</Warning>

# Streams and Fields

Below you'll find all available data streams from Órulo and their corresponding fields:

<AccordionGroup>
  <Accordion title="Buildings">
    | Field                            | Type          | Description |
    | :------------------------------- | :------------ | :---------- |
    | `id`                             | String        |             |
    | `name`                           | String        |             |
    | `status`                         | String        |             |
    | `stage`                          | String        |             |
    | `developer`                      | String (JSON) |             |
    | `publisher`                      | String (JSON) |             |
    | `address`                        | String (JSON) |             |
    | `min_price`                      | Number        |             |
    | `price_per_private_square_meter` | Number        |             |
    | `min_bathrooms`                  | Integer       |             |
    | `max_bathrooms`                  | Integer       |             |
    | `min_area`                       | Number        |             |
    | `max_area`                       | Number        |             |
    | `min_bedrooms`                   | Integer       |             |
    | `max_bedrooms`                   | Integer       |             |
    | `min_suites`                     | Integer       |             |
    | `max_suites`                     | Integer       |             |
    | `number_of_floors`               | Integer       |             |
    | `number_of_towers`               | Integer       |             |
    | `apts_per_floor`                 | Integer       |             |
    | `min_parking`                    | Integer       |             |
    | `max_parking`                    | Integer       |             |
    | `min_rental_price`               | Number        |             |
    | `max_rental_price`               | Number        |             |
    | `min_condominium_value`          | Number        |             |
    | `description`                    | String        |             |
    | `finality`                       | String        |             |
    | `opportunity`                    | String (JSON) |             |
    | `default_image`                  | String (JSON) |             |
    | `features`                       | String (JSON) |             |
    | `building_features`              | String (JSON) |             |
    | `unit_features`                  | String (JSON) |             |
    | `stock`                          | Integer       |             |
    | `orulo_url`                      | String        |             |
    | `updated_at`                     | String        |             |
    | `building_permit`                | String        |             |
    | `portfolio`                      | String (JSON) |             |
  </Accordion>

  <Accordion title="Typologies">
    | Field               | Type    | Description |
    | :------------------ | :------ | :---------- |
    | `id`                | String  |             |
    | `building_id`       | String  |             |
    | `type`              | String  |             |
    | `original_price`    | Number  |             |
    | `discount_price`    | Number  |             |
    | `private_area`      | Number  |             |
    | `total_area`        | Number  |             |
    | `bedrooms`          | Integer |             |
    | `bathrooms`         | Integer |             |
    | `suites`            | Integer |             |
    | `parking`           | Integer |             |
    | `solar_position`    | String  |             |
    | `total_units`       | Integer |             |
    | `condominium_value` | Number  |             |
    | `urban_land_tax`    | Number  |             |
    | `rental_price`      | Number  |             |
    | `stock`             | Integer |             |
    | `reference`         | String  |             |
    | `updated_at`        | String  |             |
  </Accordion>

  <Accordion title="Images">
    | Field          | Type          | Description |
    | :------------- | :------------ | :---------- |
    | `id`           | String        |             |
    | `building_id`  | String        |             |
    | `description`  | String        |             |
    | `type`         | String        |             |
    | `associations` | String (JSON) |             |
    | `200x140`      | String        |             |
    | `520x280`      | String        |             |
    | `1024x1024`    | String        |             |
    | `2280x1800`    | String        |             |
  </Accordion>

  <Accordion title="Floor Plans">
    | Field          | Type          | Description |
    | :------------- | :------------ | :---------- |
    | `id`           | String        |             |
    | `building_id`  | String        |             |
    | `description`  | String        |             |
    | `type`         | String        |             |
    | `associations` | String (JSON) |             |
    | `200x140`      | String        |             |
    | `520x280`      | String        |             |
    | `1024x1024`    | String        |             |
    | `2280x1800`    | String        |             |
  </Accordion>

  <Accordion title="Units">
    | Field            | Type    | Description |
    | :--------------- | :------ | :---------- |
    | `reference`      | String  |             |
    | `building_id`    | String  |             |
    | `typology_id`    | Integer |             |
    | `original_price` | Number  |             |
    | `price`          | Number  |             |
    | `private_area`   | Number  |             |
    | `status`         | String  |             |
    | `type`           | String  |             |
    | `bedrooms`       | Integer |             |
    | `bathrooms`      | Integer |             |
    | `suites`         | Integer |             |
    | `parking`        | Integer |             |
    | `available`      | Boolean |             |
    | `updated_at`     | String  |             |
    | `unit_end`       | Integer |             |
    | `floor`          | Integer |             |
    | `section`        | String  |             |
  </Accordion>

  <Accordion title="Partners">
    | Field        | Type   | Description |
    | :----------- | :----- | :---------- |
    | `id`         | String |             |
    | `name`       | String |             |
    | `type`       | String |             |
    | `updated_at` | String |             |
    | `logo`       | String |             |
    | `phone`      | String |             |
    | `email`      | String |             |
    | `webpage`    | String |             |
  </Accordion>

  <Accordion title="Active Building IDs">
    | Field        | Type   | Description |
    | :----------- | :----- | :---------- |
    | `id`         | String |             |
    | `updated_at` | String |             |
  </Accordion>

  <Accordion title="Removed Building IDs">
    | Field        | Type   | Description |
    | :----------- | :----- | :---------- |
    | `id`         | String |             |
    | `updated_at` | String |             |
    | `reason`     | String |             |
  </Accordion>
</AccordionGroup>

## Implementation Notes

### API Limits & Performance

* **Rate Limiting (HTTP 429)**: The connector automatically manages Órulo's API rate limits. It respects the `Retry-After` header to pause requests when limits are exceeded and employs an exponential backoff strategy (up to 10 retries) to ensure continuous and reliable data extraction.
* **Request Pacing**: To proactively avoid triggering Órulo's rate limits during extraction, a short delay (0.5 seconds) is intentionally introduced between consecutive requests for child streams (e.g., Typologies, Images, Floor Plans, and Units).
* **Missing Records (HTTP 404)**: If a specific building is missing or unavailable on Órulo's upstream (returning a 404 Not Found error), the connector will gracefully skip the building and log a warning instead of failing the entire sync, ensuring robust partial data fetching.

## Skills for agents

<Snippet file="agent-skills-intro.mdx" />

<Card title="Download Órulo skills file" icon="wand-magic-sparkles" href="/sources/orulo.md">
  Órulo connector documentation as plain markdown, for use in AI agent contexts.
</Card>
