diff --git a/ads/search.py b/ads/search.py
index eb64e70..fed6c0c 100644
--- a/ads/search.py
+++ b/ads/search.py
@@ -275,7 +275,7 @@ class SearchQuery(BaseQuery):
                       "title", "reference", "citation"]
 
     def __init__(self, query_dict=None, q=None, fq=None, fl=DEFAULT_FIELDS,
-                 sort=None, start=0, rows=50, max_pages=3, **kwargs):
+                 sort=None, start=0, rows=50, max_pages=1, **kwargs):
         """
         constructor
         :param query_dict: raw query that will be sent unmodified. raw takes
@@ -288,7 +288,7 @@ class SearchQuery(BaseQuery):
         :param start: solr "start" param (start)
         :param rows: solr "rows" param (rows)
         :param max_pages: Maximum number of pages to return. This value may
-            be modified after instansiation to increase the number of results
+            be modified after instantiation to increase the number of results
         :param kwargs: kwargs to add to `q` as "key:value"
         """
         self._articles = []
@@ -385,7 +385,7 @@ class SearchQuery(BaseQuery):
 
             # if we have hit the max_pages limit, then iteration is done.
             page = math.ceil(len(self.articles)/self.query['rows'])
-            if page > self.max_pages:
+            if page >= self.max_pages:
                 raise StopIteration("Maximum number of pages queried")
 
             # We aren't on the max_page of results nor do we have all

Number of returned results doesn't correspond to 'rows' key value in SearchQuery
Example code:
````
In [5]: papers = ads.SearchQuery(q="supernova", sort="citation_count", rows=10)  
In [6]: print(len(list(papers)))
40
````
Not massively important, but a bit surprising anyway. Any explanation? Thanks!
diff --git a/ads/tests/test_search.py b/ads/tests/test_search.py
index 346d957..331a9f5 100644
--- a/ads/tests/test_search.py
+++ b/ads/tests/test_search.py
@@ -131,18 +131,24 @@ class TestSearchQuery(unittest.TestCase):
             self.assertEqual(len(sq.articles), 1)
             self.assertEqual(sq._query['start'], 1)
             self.assertEqual(next(sq).bibcode, '2012GCN..13229...1S')
-            self.assertEqual(len(list(sq)), 19)  # 2 already returned
+            self.assertEqual(len(list(sq)), 18)  # 2 already returned
             with self.assertRaisesRegexp(
                     StopIteration,
                     "Maximum number of pages queried"):
                 next(sq)
             sq.max_pages = 500
-            self.assertEqual(len(list(sq)), 28-19-2)
+            self.assertEqual(len(list(sq)), 28-18-2)
             with self.assertRaisesRegexp(
                     StopIteration,
                     "All records found"):
                 next(sq)
 
+        # not setting max_pages should return the exact number of rows requests
+        sq = SearchQuery(q="unittest", rows=3)
+        with MockSolrResponse(sq.HTTP_ENDPOINT):
+            self.assertEqual(len(list(sq)), 3)
+
+
     def test_init(self):
         """
         init should result in a properly formatted query attribute

pip install -e .
parse_log_pytest
requirements.txt
pytest
apt-get update apt-get install -y gcc
3.9
requirements.txt
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
-e git+https://github.com/andycasey/ads.git@5bd62ef2bf924116374455e222ea9ac8dc416b3a#egg=ads
certifi==2025.1.31
charset-normalizer==3.4.1
exceptiongroup==1.2.2
httpretty==1.1.4
idna==3.10
iniconfig==2.1.0
MarkupSafe==3.0.2
mock==5.2.0
packaging==24.2
pluggy==1.5.0
pytest==8.3.5
requests==2.32.3
six==1.17.0
tomli==2.2.1
urllib3==2.3.0
Werkzeug==3.1.3

name: ads
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - ca-certificates=2025.2.25=h06a4308_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.4.4=h6a678d5_1
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - ncurses=6.4=h6a678d5_0
  - openssl=3.0.16=h5eee18b_0
  - pip=25.0=py39h06a4308_0
  - python=3.9.21=he870216_1
  - readline=8.2=h5eee18b_0
  - setuptools=75.8.0=py39h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - tzdata=2025a=h04d1e81_0
  - wheel=0.45.1=py39h06a4308_0
  - xz=5.6.4=h5eee18b_1
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - certifi==2025.1.31
      - charset-normalizer==3.4.1
      - exceptiongroup==1.2.2
      - httpretty==1.1.4
      - idna==3.10
      - iniconfig==2.1.0
      - markupsafe==3.0.2
      - mock==5.2.0
      - packaging==24.2
      - pluggy==1.5.0
      - pytest==8.3.5
      - requests==2.32.3
      - six==1.17.0
      - tomli==2.2.1
      - urllib3==2.3.0
      - werkzeug==3.1.3
prefix: /opt/conda/envs/ads

ads/tests/test_search.py::TestSearchQuery::test_iter
ads/tests/test_search.py::TestArticle::test_cached_properties ads/tests/test_search.py::TestArticle::test_equals ads/tests/test_search.py::TestArticle::test_get_field ads/tests/test_search.py::TestArticle::test_init ads/tests/test_search.py::TestArticle::test_print_methods ads/tests/test_search.py::TestSearchQuery::test_init ads/tests/test_search.py::TestSolrResponse::test_articles ads/tests/test_search.py::TestSolrResponse::test_init ads/tests/test_search.py::TestSolrResponse::test_load_http_response ads/tests/test_search.py::Testquery::test_init
ads/search.py
ads/search.py