diff --git a/user-ops-indexer/README.md b/user-ops-indexer/README.md
new file mode 100644
index 000000000..b5923dae4
--- /dev/null
+++ b/user-ops-indexer/README.md
@@ -0,0 +1,80 @@
+#
User Ops Indexer
+
+**User Ops Indexer** is a service designed to index, decode and serve user operations as per the ERC-4337 standard.
+
+The service can index 2 official ERC-4337 Entrypoint deployments:
+
+* v0.6
+ Entrypoint - [0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789](https://eth.blockscout.com/address/0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789)
+* v0.7
+ Entrypoint - [0x0000000071727De22E5E9d8BAf0edAc6f37da032](https://eth.blockscout.com/address/0x0000000071727De22E5E9d8BAf0edAc6f37da032)
+
+The service consists of 2 parts:
+
+* [Indexer logic](./user-ops-indexer-logic) - entrypoint contract indexing module. Each entrypoint contract is
+ indexed in a separate tokio async task.
+* [API server](./user-ops-indexer-server) - API module serving data about indexed user operations, accounts, factories,
+ bundlers.
+
+## Requirements
+
+No additional dependencies
+
+## How to run
+
+### Production
+
+Set the following ENVs on the Blockscout
+instance ([configuration](https://github.com/blockscout/docs/blob/master/for-developers/information-and-settings/env-variables.md#blockscout-account-abstraction)):
+
+* `MICROSERVICE_ACCOUNT_ABSTRACTION_ENABLED=true`
+* `MICROSERVICE_ACCOUNT_ABSTRACTION_URL={service_url}`
+
+And the following ENVs on the Blockscout
+frontend ([configuration](https://github.com/blockscout/frontend/blob/main/docs/ENVS.md#user-operations-feature-erc-4337)):
+
+* `NEXT_PUBLIC_HAS_USER_OPS=true`
+
+It's recommended to run all the services
+using [docker compose](https://github.com/blockscout/blockscout/tree/master/docker-compose)
+or [Blockscout Stack Helm charts](https://docs.blockscout.com/for-developers/deployment/kubernetes-deployment).
+
+### Locally
+
+For testing and development purposes, service can be run locally, without having an active instance of Blockscout Elixir
+backend, but it'll need access to the working JSON RPC URL and to the fully indexed Blockscout database (tables `blocks`
+and `logs` in particular).
+
+Configure env as described above and then run the service as following:
+
+```shell
+cargo run --bin user-ops-indexer-server
+```
+
+## Envs
+
+Here, we describe variables specific to this service. Variables common to all services can be
+found [here](../docs/common-envs.md).
+
+| Variable | Required | Description | Default value |
+|-----------------------------------------------------------------|----------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------|
+| `USER_OPS_INDEXER__API__MAX_PAGE_SIZE` | | Max page size for API requests | `100` |
+| `USER_OPS_INDEXER__INDEXER__RPC_URL` | true | Indexer RPC URL, should be an archive JSON RPC node with `eth`, `web3` and `trace`/`debug` namespaces enabled. Both HTTP and WS protocols are supported. WS is recommended for local RPC nodes, use HTTP otherwise. | `ws://127.0.0.1:8546` |
+| `USER_OPS_INDEXER__INDEXER__CONCURRENCY` | | Indexer concurrency. Will process up to the configured number of transactions concurrently | `10` |
+| `USER_OPS_INDEXER__INDEXER__ENTRYPOINTS__V06` | | Enable Entrypoint v0.6 indexer | `true` |
+| `USER_OPS_INDEXER__INDEXER__ENTRYPOINTS__V07` | | Enable Entrypoint v0.7 indexer | `true` |
+| `USER_OPS_INDEXER__INDEXER__REALTIME__ENABLED` | | Enable forward realtime indexing of user operations from the `latest` block | `true` |
+| `USER_OPS_INDEXER__INDEXER__PAST_RPC_LOGS_INDEXER__ENABLED` | | Enable one-time reindex of missed user operations from recent blocks | `false` |
+| `USER_OPS_INDEXER__INDEXER__PAST_RPC_LOGS_INDEXER__BLOCK_RANGE` | | Block range width for missed user operations reindex. Will re-index events from a given number of blocks prior the `latest` block | `0` |
+| `USER_OPS_INDEXER__INDEXER__PAST_DB_LOGS_INDEXER__ENABLED` | | Enable one-time reindex of missed user operations from core Blockscout DB. Will query relevant events from `logs` Postgres table | `false` |
+| `USER_OPS_INDEXER__INDEXER__PAST_DB_LOGS_INDEXER__START_BLOCK` | | Block range start for one-time DB reindex. Use positive number for static block number, or zero/negative number to count backwards from `latest` | `0` |
+| `USER_OPS_INDEXER__INDEXER__PAST_DB_LOGS_INDEXER__END_BLOCK` | | Block range end for one-time DB reindex. Use positive number for static block number, or zero/negative number to count backwards from `latest` | `0` |
+| `USER_OPS_INDEXER__DATABASE__CONNECT__URL` | true | Postgres connect URL to Blockscout DB with read/write access | (empty) |
+| `USER_OPS_INDEXER__DATABASE__CREATE_DATABASE` | | Create database if doesn't exist | `false` |
+| `USER_OPS_INDEXER__DATABASE__RUN_MIGRATIONS` | | Run database migrations | `false` |
+
+## Links
+
+- [Swagger](https://blockscout.github.io/swaggers/services/user-ops-indexer/index.html)
+- [Packages](https://github.com/blockscout/blockscout-rs/pkgs/container/user-ops-indexer)
+- [Releases](https://github.com/blockscout/blockscout-rs/releases?q=user-ops-indexer&expanded=true)