diff --git a/app/src/main/java/com/example/abe/ui/scanner/ScannerFragment.kt b/app/src/main/java/com/example/abe/ui/scanner/ScannerFragment.kt
index 2378b8d5ec9b29d7af133755772842f40c3b3596..ad99bb79fbc88fa37d4d9d039c91edc8a3ad817c 100644
--- a/app/src/main/java/com/example/abe/ui/scanner/ScannerFragment.kt
+++ b/app/src/main/java/com/example/abe/ui/scanner/ScannerFragment.kt
@@ -72,6 +72,8 @@ class ScannerFragment : Fragment(), UploadResultCallback {
 
     private var isProcessingPhoto = false
 
+    private lateinit var waitingUploadDialog: Dialog
+
     private val viewModel: ScannerViewModel by viewModels {
         ScannerViewModelFactory((activity?.application as ABEApplication).repository)
     }
@@ -160,6 +162,11 @@ class ScannerFragment : Fragment(), UploadResultCallback {
             openGallery()
         }
 
+        waitingUploadDialog = Dialog(requireContext()).apply {
+            setCancelable(false)
+            setContentView(R.layout.dialog_waiting_upload)
+        }
+
         return binding.root
     }
 
@@ -199,6 +206,8 @@ class ScannerFragment : Fragment(), UploadResultCallback {
     }
 
     private fun attemptUpload(imageFile: File) {
+        waitingUploadDialog.show()
+
         lifecycleScope.launch {
             val retrofit = Retrofit()
             val token = (activity as MainActivity).preferenceDataStoreHelper.getFirstPreference(
@@ -385,6 +394,8 @@ class ScannerFragment : Fragment(), UploadResultCallback {
         uploadResponse?.items?.items?.forEach { item ->
             viewModel.insertTransaction(user, item, latitude, longitude, location)
         }
+
+        waitingUploadDialog.dismiss()
         val msg = "New transactions added!"
         Toast.makeText(requireContext(), msg, Toast.LENGTH_SHORT).show()
 
@@ -397,6 +408,7 @@ class ScannerFragment : Fragment(), UploadResultCallback {
         Toast.makeText(requireContext(), "Upload failed", Toast.LENGTH_SHORT).show()
         Log.e("ABE-PHO", errorMessage)
         isProcessingPhoto = false
+        waitingUploadDialog.dismiss()
     }
 
     private fun openGallery() {
diff --git a/app/src/main/res/layout/dialog_waiting_upload.xml b/app/src/main/res/layout/dialog_waiting_upload.xml
new file mode 100644
index 0000000000000000000000000000000000000000..b051d66425d1c8ffc57f7feaa9d7b53193e6e19e
--- /dev/null
+++ b/app/src/main/res/layout/dialog_waiting_upload.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:orientation="vertical"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:padding="24dp">
+
+    <TextView
+        android:id="@+id/textView"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:text="@string/waiting_for_receipt_upload"
+        android:textColor="@android:color/black"
+        android:textSize="16sp"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent" />
+
+    <com.google.android.material.progressindicator.CircularProgressIndicator
+        android:layout_width="64dp"
+        android:layout_height="62dp"
+        android:layout_marginTop="24dp"
+        android:indeterminate="true"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toBottomOf="@+id/textView"
+        app:trackThickness="5dp"
+        app:indicatorSize="50dp"/>
+
+</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index b6150e23f188544f100326d84e7e6f2c006be681..0ef1535ba98f28e2ca5a5d9a6231827120b7b710 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -33,4 +33,5 @@
     <!-- TODO: Remove or change this placeholder text -->
     <string name="hello_blank_fragment">Hello blank fragment</string>
     <string name="twibbon_overlay">Twibbon overlay</string>
+    <string name="waiting_for_receipt_upload">Waiting for receipt upload</string>
 </resources>
\ No newline at end of file