diff --git a/src/libcamera/pipeline/simple/simple.cpp b/src/libcamera/pipeline/simple/simple.cpp
index 91b149d1..cce42af7 100644
--- a/src/libcamera/pipeline/simple/simple.cpp
+++ b/src/libcamera/pipeline/simple/simple.cpp
@@ -363,6 +363,7 @@ public:
 	std::unique_ptr<Converter> converter_;
 	std::unique_ptr<SoftwareIsp> swIsp_;
 	SimpleFrames frameInfo_;
+	std::optional<Rectangle> scalerCrop_;
 
 private:
 	void tryPipeline(unsigned int code, const Size &size);
@@ -1022,10 +1023,10 @@ void SimpleCameraData::updateScalerCrop(const Size &inputSize, Transform transfo
 		}
 	}
 
-	Rectangle crop = debayerCropToSensor(swIsp_->inputCrop(), inputSize,
-					     sensorInfo.analogCrop, sensorInfo.activeArea,
-					     transform);
-	properties_.set(properties::ScalerCropMaximum, crop);
+	scalerCrop_ = debayerCropToSensor(swIsp_->inputCrop(), inputSize,
+					  sensorInfo.analogCrop, sensorInfo.activeArea,
+					  transform);
+	properties_.set(properties::ScalerCropMaximum, *scalerCrop_);
 }
 
 void SimpleCameraData::tryCompleteRequest(Request *request)
@@ -1042,6 +1043,9 @@ void SimpleCameraData::tryCompleteRequest(Request *request)
 	if (info->metadataRequired && !info->metadataProcessed)
 		return;
 
+	if (scalerCrop_)
+		request->_d()->metadata().set(controls::ScalerCrop, *scalerCrop_);
+
 	frameInfo_.destroy(info->frame);
 	pipe()->completeRequest(request);
 }
@@ -1550,6 +1554,7 @@ int SimplePipelineHandler::configure(Camera *camera, CameraConfiguration *c)
 	V4L2VideoDevice *video = data->video_;
 	int ret;
 
+	data->scalerCrop_.reset();
 	data->properties_ = data->sensor_->properties();
 
 	/*
