diff --git a/CHANGELOG.txt b/CHANGELOG.txt
index 702adc7..0098da4 100644
--- a/CHANGELOG.txt
+++ b/CHANGELOG.txt
@@ -4,6 +4,7 @@ Next release
 Features and enhancements
 - #2516828 - Add mdreg alias for migrate-deregister.
 - #2504517 - Add timezone handling to timestamp().
+- #2532222 - Allow spreadsheet source data on a row different that 1.
 
 Migrate 2.8
 ===========
diff --git a/plugins/sources/spreadsheet.inc b/plugins/sources/spreadsheet.inc
index 87f37cb..c3ba3b1 100644
--- a/plugins/sources/spreadsheet.inc
+++ b/plugins/sources/spreadsheet.inc
@@ -71,6 +71,13 @@ class MigrateSourceSpreadsheet extends MigrateSource {
   protected $columns;
 
   /**
+   * The first row from where the table starts. It's a "zero based" value.
+   *
+   * @var int
+   */
+  protected $headerRows = 0;
+
+  /**
    * Simple initialization.
    *
    * @param string $path
@@ -78,13 +85,18 @@ class MigrateSourceSpreadsheet extends MigrateSource {
    * @param string $sheet_name
    *   The name of the sheet to be processed.
    * @param array $options
-   *   Options applied to this source.
+   *   Options applied to this source. If the source data begins on different
+   *   row than the first row, pass this "zero based" value as 'header_rows' in
+   *   options, along with other options inherited from MigrateSource.
    */
   public function __construct($path, $sheet_name, $columns = array(), array $options = array()) {
     parent::__construct($options);
     $this->file = $path;
     $this->sheetName = $sheet_name;
     $this->columns = $columns;
+    if (!empty($options['header_rows'])) {
+      $this->headerRows = $options['header_rows'];
+    }
 
     // Load the workbook.
     if ($this->load()) {
@@ -94,7 +106,7 @@ class MigrateSourceSpreadsheet extends MigrateSource {
 
       // Map field names to their column index.
       for ($col = 0; $col < $this->cols; ++$col) {
-        $this->fields[$col] = trim($this->worksheet->getCellByColumnAndRow($col, 1)->getValue());
+        $this->fields[$col] = trim($this->worksheet->getCellByColumnAndRow($col, $this->headerRows + 1)->getValue());
       }
 
       $this->unload();
@@ -190,8 +202,8 @@ class MigrateSourceSpreadsheet extends MigrateSource {
    * Returns a count of all available source records.
    */
   public function computeCount() {
-    // Subtract 1 for the header.
-    return $this->rows - 1;
+    // Subtract the non-data rows (rows before header and the header).
+    return $this->rows - $this->headerRows + 1;
   }
 
   /**
@@ -205,7 +217,7 @@ class MigrateSourceSpreadsheet extends MigrateSource {
       $this->load();
     }
 
-    $this->rowNumber = 1;
+    $this->rowNumber = $this->headerRows + 1;
   }
 
   /**
