# Environment Variables

### OUTPUT

Ethereum ETL supports a variety of item exporters, which are classes that write items to specified destinations. To configure an item exporter, set the `OUTPUT` environment variable. You can specify multiple outputs at once using the format: \
&#x20;`OUTPUT=exporter_name://path,second_exporter://path_to_second_destination`.

Here are the item exporters available out of the box and how to set them up:

<table><thead><tr><th width="189">Exporter</th><th width="202">Configuration</th><th>Example Value</th></tr></thead><tbody><tr><td><strong>CONSOLE</strong></td><td>Output to the console</td><td><code>OUTPUT=console</code> or <code>OUTPUT=None</code></td></tr><tr><td><strong>JSON</strong></td><td>Output to a JSON file</td><td><code>OUTPUT=path_to_output.json</code></td></tr><tr><td><strong>CSV</strong></td><td>Output to a CSV file</td><td><code>OUTPUT=path_to_output.csv</code></td></tr><tr><td><strong>PROJECTS</strong></td><td>Output to Google Cloud Projects</td><td><code>OUTPUT=projects://path_to_google_cloud_project</code></td></tr><tr><td><strong>KINESIS</strong></td><td>Output to AWS Kinesis stream</td><td><code>OUTPUT=kinesis://stream_name</code></td></tr><tr><td><strong>KAFKA</strong></td><td>Output to Apache Kafka topic</td><td><code>OUTPUT=kafka://topic</code></td></tr><tr><td><strong>POSTGRES</strong></td><td>Output to PostgreSQL database</td><td><code>OUTPUT=postgresql://user:password@host:port/dbname</code></td></tr><tr><td><strong>GCS</strong></td><td>Output to Google Cloud Storage bucket</td><td><code>OUTPUT=gs://bucket_name</code></td></tr><tr><td><strong>CLICKHOUSE</strong></td><td>Output to ClickHouse database</td><td><code>OUTPUT=clickhouse+http://host:port/dbname</code></td></tr><tr><td><strong>AMQP</strong></td><td>Output to AMQP message broker</td><td><code>OUTPUT=amqp://user:password@host:port/vhost</code> or <code>OUTPUT=rabbitmq://user:password@host:port/vhost</code></td></tr><tr><td><strong>ELASTICSEARCH</strong></td><td>Output to Elasticsearch index</td><td><code>OUTPUT=elasticsearch+http://host:port/index_name</code> or <code>OUTPUT=elasticsearch+https://user:password@host:9200/index_name</code></td></tr></tbody></table>

### DATABASE

Optional, is used when Clickhouse is in OUTPUT. Specifies the name of the ClickHouse database. You can choose any name.

### PROVIDER\_URL

The URL of your RPC provider (public node, Infura, local node, etc.). `PROVIDER_URL=https://ethereum-rpc.publicnode.com`

### LAST\_SYNCED\_BLOCK\_PROVIDER

Optional, if not set, a local file will be used. The provider used to sync the last indexed block (local file, Redis, SQL database).

`LAST_SYNCED_BLOCK_PROVIDER=redis://redis:6379`

`LAST_SYNCED_BLOCK_PROVIDER=clickhouse+http://clickouse:8123/database_name`

### EXPORT\_FROM\_CLICKHOUSE

Optional. If set, the indexer will export entities from ClickHouse first and fallback to the node if necessary. Useful for indexed tokens and pools or multiple indexers.

`EXPORT_FROM_CLICKHOUSE=clickhouse+http://clickhouse-2:8123/db_same_blockchain`

### START\_BLOCK

The block number to start indexing from. It can be set as the latest block. If the block number from the `LAST_SYNCED_BLOCK_PROVIDER` is greater than `START_BLOCK`, then the last synced block will be used. Examples:

`START_BLOCK='latest' or START_BLOCK=1337`

### END\_BLOCK

(Optional) The block number to stop indexing. If not set, indexing continues indefinitely.

### ENTITY\_TYPES

A comma-separated list of entities to export

`ENTITY_TYPES=block,transaction,token_transfer`

| Entity                     | Description                                                           |
| -------------------------- | --------------------------------------------------------------------- |
| block                      | Information about each block in the blockchain.                       |
| transaction                | Data related to individual transactions.                              |
| receipt                    | Receipts for each transaction, including status and gas used.         |
| log                        | Logs generated by smart contract events during transactions.          |
| token\_transfer            | Transfers of ERC-20, ERC-721, and other tokens.                       |
| geth\_trace                | Call traces from the Geth Ethereum client.                            |
| contract                   | Information about smart contracts deployed on the blockchain.         |
| token                      | Metadata and details about tokens.                                    |
| internal\_transfer         | Internal Ether transfers within the blockchain.                       |
| token\_balance             | Balances of tokens held by addresses.                                 |
| error                      | Errors encountered during indexing.                                   |
| native\_balance            | Balances of native cryptocurrency (e.g., Ether) held by addresses.    |
| token\_transfer\_priced    | Priced transfers of tokens, including valuation.                      |
| internal\_transfer\_priced | Priced internal transfers, including valuation.                       |
| dex\_pool                  | Information about decentralized exchange (DEX) liquidity pools.       |
| enriched\_dex\_trade       | Enhanced details about DEX trades, including additional context.      |
| enriched\_transfer         | Enhanced details about token transfers, including additional context. |


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.gurunetwork.ai/framework/indexer/environment-variables.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
