diff --git a/services/blob/src/config.rs b/services/blob/src/config.rs
--- a/services/blob/src/config.rs
+++ b/services/blob/src/config.rs
@@ -4,7 +4,8 @@
 use tracing::info;
 
 use crate::constants::{
-  DEFAULT_GRPC_PORT, DEFAULT_HTTP_PORT, LOCALSTACK_URL, SANDBOX_ENV_VAR,
+  DEFAULT_GRPC_PORT, DEFAULT_HTTP_PORT, DEFAULT_S3_BUCKET_NAME, LOCALSTACK_URL,
+  S3_BUCKET_ENV_VAR, SANDBOX_ENV_VAR,
 };
 
 #[derive(Parser)]
@@ -25,6 +26,9 @@
   /// AWS Localstack service URL, applicable in sandbox mode
   #[arg(long, default_value_t = LOCALSTACK_URL.to_string())]
   pub localstack_url: String,
+  #[arg(env = S3_BUCKET_ENV_VAR)]
+  #[arg(long, default_value_t = DEFAULT_S3_BUCKET_NAME.to_string())]
+  pub s3_bucket_name: String,
 }
 
 /// Stores configuration parsed from command-line arguments
@@ -43,6 +47,10 @@
     "gRPC and HTTP ports cannot be the same: {}",
     cfg.grpc_port
   );
+
+  if cfg.s3_bucket_name != DEFAULT_S3_BUCKET_NAME {
+    info!("Using custom S3 bucket: {}", &cfg.s3_bucket_name);
+  }
   Ok(())
 }
 
diff --git a/services/blob/src/constants.rs b/services/blob/src/constants.rs
--- a/services/blob/src/constants.rs
+++ b/services/blob/src/constants.rs
@@ -70,5 +70,6 @@
 
 // S3 constants
 
-pub const BLOB_S3_BUCKET_NAME: &str = "commapp-blob";
+pub const S3_BUCKET_ENV_VAR: &str = "BLOB_S3_BUCKET_NAME";
+pub const DEFAULT_S3_BUCKET_NAME: &str = "commapp-blob";
 pub const S3_MULTIPART_UPLOAD_MINIMUM_CHUNK_SIZE: u64 = 5 * 1024 * 1024;
diff --git a/services/blob/src/database/old.rs b/services/blob/src/database/old.rs
--- a/services/blob/src/database/old.rs
+++ b/services/blob/src/database/old.rs
@@ -7,12 +7,13 @@
 use tracing::error;
 
 use crate::{
+  config::CONFIG,
   constants::{
     BLOB_REVERSE_INDEX_TABLE_BLOB_HASH_FIELD,
     BLOB_REVERSE_INDEX_TABLE_HASH_INDEX_NAME,
     BLOB_REVERSE_INDEX_TABLE_HOLDER_FIELD, BLOB_REVERSE_INDEX_TABLE_NAME,
-    BLOB_S3_BUCKET_NAME, BLOB_TABLE_BLOB_HASH_FIELD, BLOB_TABLE_CREATED_FIELD,
-    BLOB_TABLE_NAME, BLOB_TABLE_S3_PATH_FIELD,
+    BLOB_TABLE_BLOB_HASH_FIELD, BLOB_TABLE_CREATED_FIELD, BLOB_TABLE_NAME,
+    BLOB_TABLE_S3_PATH_FIELD,
   },
   s3::S3Path,
 };
@@ -32,7 +33,7 @@
     BlobItem {
       blob_hash: hash_str.clone(),
       s3_path: S3Path {
-        bucket_name: BLOB_S3_BUCKET_NAME.to_string(),
+        bucket_name: CONFIG.s3_bucket_name.clone(),
         object_name: hash_str,
       },
       created: Utc::now(),
diff --git a/services/blob/src/database/types.rs b/services/blob/src/database/types.rs
--- a/services/blob/src/database/types.rs
+++ b/services/blob/src/database/types.rs
@@ -6,10 +6,7 @@
 use derive_more::Constructor;
 use std::collections::HashMap;
 
-use crate::{
-  constants::{db::*, BLOB_S3_BUCKET_NAME},
-  s3::S3Path,
-};
+use crate::{config::CONFIG, constants::db::*, s3::S3Path};
 
 use super::errors::Error as DBError;
 
@@ -58,7 +55,7 @@
     BlobItemInput {
       blob_hash: blob_hash.clone(),
       s3_path: S3Path {
-        bucket_name: BLOB_S3_BUCKET_NAME.into(),
+        bucket_name: CONFIG.s3_bucket_name.clone(),
         object_name: blob_hash,
       },
     }