diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 574af5742630545b827871e783443ae351d0c8a6..419e7dbbf554f7f58f3434094d8f4449752bdd24 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -306,8 +306,7 @@ create_g1_data:
   image: rust:1-bullseye
   variables:
     WASM_FILE: $CI_PROJECT_DIR/release/${RUNTIME}_runtime.compact.compressed.wasm
-    DUNITER_GENESIS_DATA: $CI_PROJECT_DIR/release/g1-data.json
-    DUNITER_GENESIS_EXPORT: $CI_PROJECT_DIR/release/${RUNTIME}-indexer.json
+    DUNITER_GENESIS_DATA: $CI_PROJECT_DIR/release/genesis.json # py-g1-migrator outputs this file with `./main.py`
     DEBIAN_FRONTEND: noninteractive
   script:
     - apt-get update
@@ -358,7 +357,7 @@ create_release:
     - export MILESTONE=$(echo $CI_COMMIT_BRANCH | sed -e "s/release\///g")
     - cargo xtask release-runtime $MILESTONE $CI_COMMIT_BRANCH
     # We always ship runtimes: this is both a proof and a convenience
-    - cargo xtask create-asset-link $MILESTONE g1-data.json https://nodes.pages.duniter.org/-/rust/duniter-v2s/-/jobs/$CI_JOB_ID/artifacts/release/g1-data.json
+    - cargo xtask create-asset-link $MILESTONE genesis.json https://nodes.pages.duniter.org/-/rust/duniter-v2s/-/jobs/$CI_JOB_ID/artifacts/release/genesis.json
     - cargo xtask create-asset-link $MILESTONE gdev_runtime.compact.compressed.wasm https://nodes.pages.duniter.org/-/rust/duniter-v2s/-/jobs/$CI_JOB_ID/artifacts/release/gdev_runtime.compact.compressed.wasm
     - cargo xtask create-asset-link $MILESTONE gtest_runtime.compact.compressed.wasm https://nodes.pages.duniter.org/-/rust/duniter-v2s/-/jobs/$CI_JOB_ID/artifacts/release/gtest_runtime.compact.compressed.wasm
     - cargo xtask create-asset-link $MILESTONE gdev_client-specs.yaml https://nodes.pages.duniter.org/-/rust/duniter-v2s/-/jobs/$CI_JOB_ID/artifacts/release/gdev_client-specs.yaml
diff --git a/node/src/chain_spec/gen_genesis_data.rs b/node/src/chain_spec/gen_genesis_data.rs
index 8807e1453cc48a492529c7b564a18dc625123458..d87347c4409e6b729e01f6bb837f2dc8223676ef 100644
--- a/node/src/chain_spec/gen_genesis_data.rs
+++ b/node/src/chain_spec/gen_genesis_data.rs
@@ -34,7 +34,6 @@ use sp_runtime::{
 use std::{
     collections::{BTreeMap, HashMap},
     fmt::{Display, Formatter},
-    fs,
     ops::{Add, Sub},
 };
 
@@ -129,7 +128,6 @@ pub struct GenesisIndexerExport {
     technical_committee: Vec<String>,
     ud: u64,
     wallets: BTreeMap<AccountId, u64>,
-    transactions_history: Option<BTreeMap<AccountId, Vec<TransactionV2>>>,
 }
 
 #[derive(Deserialize, Serialize)]
@@ -155,7 +153,6 @@ struct GenesisMigrationData {
     identities: BTreeMap<String, IdentityV1>,
     #[serde(default)]
     wallets: BTreeMap<PubkeyV1, u64>,
-    transactions_history: Option<BTreeMap<PubkeyV1, Vec<TransactionV1>>>,
 }
 
 // Base58 encoded Ed25519 public key
@@ -667,68 +664,7 @@ where
     }
 
     // Indexer output
-    if let Ok(path) = std::env::var("DUNITER_GENESIS_EXPORT") {
-        // genesis_certs_min_received => min_cert
-        // genesis_memberships_expire_on => membership_period
-        // genesis_smith_certs_min_received => smith_min_cert
-        let export = GenesisIndexerExport {
-            first_ud,
-            first_ud_reeval,
-            genesis_parameters: common_parameters.clone(),
-            identities: identities_v2,
-            sudo_key: sudo_key.clone(),
-            technical_committee,
-            ud,
-            wallets: accounts
-                .iter()
-                .map(|(account_id, data)| (account_id.clone(), data.balance))
-                .collect(),
-            smiths: (smiths)
-                .iter()
-                .map(|smith| {
-                    (
-                        smith.name.clone(),
-                        SmithData {
-                            idty_index: smith.idty_index,
-                            name: smith.name.clone(),
-                            account: smith.account.clone(),
-                            session_keys: smith.session_keys.clone(),
-                            certs_received: smith.certs_received.clone(),
-                        },
-                    )
-                })
-                .collect::<BTreeMap<String, SmithData>>(),
-            transactions_history: genesis_data.transactions_history.map(|history| {
-                history
-                    .iter()
-                    // Avoid wrong pubkeys in tx history
-                    .filter(|(pubkey, _)| v1_pubkey_to_account_id((*pubkey).clone()).is_ok())
-                    .map(|(pubkey, txs)| {
-                        (
-                            v1_pubkey_to_account_id(pubkey.clone())
-                                .expect("already checked account"),
-                            txs.iter()
-                                // Avoid wrong pubkeys in tx history
-                                .filter(|tx| v1_pubkey_to_account_id(tx.issuer.clone()).is_ok())
-                                .map(|tx| TransactionV2 {
-                                    issuer: v1_pubkey_to_account_id(tx.issuer.clone())
-                                        .expect("already checked tx.issuer"),
-                                    amount: tx.amount.clone(),
-                                    written_time: tx.written_time,
-                                    comment: tx.comment.clone(),
-                                })
-                                .collect::<Vec<TransactionV2>>(),
-                        )
-                    })
-                    .collect::<BTreeMap<AccountId, Vec<TransactionV2>>>()
-            }),
-        };
-        fs::write(
-            &path,
-            serde_json::to_string_pretty(&export).expect("should be serializable"),
-        )
-        .unwrap_or_else(|_| panic!("Could not export genesis data to {}", &path));
-    }
+    // handled by indexer directly from py-g1-migrator output
 
     let genesis_data = GenesisData {
         accounts,