diff --git a/resources/weight_analyzer/Cargo.toml b/resources/weight_analyzer/Cargo.toml
index d7ef1f134010480f37137e00567342b8a67e2d6e..56c59b7e21cc5b10e117a43e22800756748b91b1 100644
--- a/resources/weight_analyzer/Cargo.toml
+++ b/resources/weight_analyzer/Cargo.toml
@@ -14,4 +14,6 @@ path = "src/lib.rs"
 
 [dependencies]
 subweight-core = "3.3.1"
+convert_case = "0.6.0"
 glob = "0.3.1"
+serde = { version = "1.0.101", features = ["derive"] }
diff --git a/resources/weight_analyzer/src/lib.rs b/resources/weight_analyzer/src/lib.rs
index ac3fd9604bd587444ed9a41cc9f69cc55dcd35ea..b289cfcba6dc42ab6598145652cb03af8847d73d 100644
--- a/resources/weight_analyzer/src/lib.rs
+++ b/resources/weight_analyzer/src/lib.rs
@@ -1,4 +1,6 @@
+use convert_case::{Case, Casing};
 use glob::glob;
+use serde::Serialize;
 use std::collections::HashMap;
 use std::ops::Div;
 use std::path::Path;
@@ -22,7 +24,7 @@ impl Div<&MaxBlockWeight> for f64 {
     }
 }
 
-#[derive(Debug)]
+#[derive(Clone, Debug, Serialize)]
 pub struct WeightInfo {
     pub weight: u128,
     pub relative_weight: f64,
@@ -64,14 +66,9 @@ pub fn analyze_weight(
 
 fn read_pallet_weight(folder_path: &Path) -> Vec<Vec<ChromaticExtrinsic>> {
     let mut parsed_files = Vec::new();
-    for path in glob(
-        folder_path
-            .join("pallet_*")
-            .to_str()
-            .expect("Invalid pallet path"),
-    )
-    .expect("Invalid pallet pattern")
-    .filter_map(Result::ok)
+    for path in glob(folder_path.join("*").to_str().expect("Invalid pallet path"))
+        .expect("Invalid pallet pattern")
+        .filter_map(Result::ok)
     {
         let file = subweight_core::parse::pallet::parse_file(&path);
         if let Ok(file) = file {
@@ -117,7 +114,14 @@ fn evaluate_weight(
         .unwrap();
     let relative_weight = (weight as f64) / max_block_weight * 100.;
     Ok((
-        extrinsic.pallet,
+        extrinsic
+            .pallet
+            .to_case(Case::Title)
+            .replace("Pallet", "")
+            .replace(".rs", "")
+            .chars()
+            .filter(|c| !c.is_whitespace())
+            .collect(),
         extrinsic.name,
         WeightInfo {
             weight,
@@ -131,12 +135,16 @@ fn process(
     mut scope: Scope<Term<u128>>,
     max_block_weight: &MaxBlockWeight,
 ) -> HashMap<String, HashMap<String, WeightInfo>> {
-    let mut weight_by_pallet = HashMap::new();
+    let mut weight_by_pallet: HashMap<String, HashMap<String, WeightInfo>> = HashMap::new();
     for i in pallet_weights {
         for j in i {
             let (pallet, extrinsic, weight) =
                 evaluate_weight(j, &mut scope, max_block_weight).unwrap();
-            weight_by_pallet.insert(pallet.clone(), HashMap::from([(extrinsic.clone(), weight)]));
+            if let Some(i) = weight_by_pallet.get_mut(&pallet) {
+                i.insert(extrinsic, weight);
+            } else {
+                weight_by_pallet.insert(pallet, HashMap::from([(extrinsic, weight)]));
+            }
         }
     }
     weight_by_pallet
@@ -153,6 +161,7 @@ mod tests {
             Path::new("../../runtime/common/src/weights/"),
             &MaxBlockWeight::default(),
         );
+        assert!(weight_by_pallet.get("Balances").unwrap().len() == 7); // 7 extrinsics in pallet
         println!("{:?}", weight_by_pallet); // cargo test  -- --nocapture
     }
     #[test]