Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [0.21.0] - 2026-07-17

### Added

- **eBay completed-search sold dates** — `SearchResult` now exposes `sold_date` (sale date text as rendered by eBay, e.g. "2 Jul 2026"; localized on non-English markets) and `sold_date_at` (best-effort ISO date "2026-07-02", `None` when the market's format isn't English) on `client.ebay` completed/sold result cards. (SCR-122)

## [0.20.0] - 2026-07-13

### Added
Expand Down
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[project]
name = "scrapebadger"
version = "0.20.0"
version = "0.21.0"
description = "Official Python SDK for ScrapeBadger - Async web scraping APIs for Twitter and more"
readme = "README.md"
license = { text = "MIT" }
Expand Down
2 changes: 1 addition & 1 deletion src/scrapebadger/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -863,7 +863,7 @@ async def main():
ZestimateHistoryPoint as ZillowZestimateHistoryPoint,
)

__version__ = "0.20.0"
__version__ = "0.21.0"

__all__ = [
# TikTok core models
Expand Down
2 changes: 2 additions & 0 deletions src/scrapebadger/ebay/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,8 @@ class SearchResult(_BaseModel):
location: str | None = None
returns: str | None = None
sold_count: int | None = None
sold_date: str | None = None # completed cards: sale date as rendered, e.g. "2 Jul 2026"
sold_date_at: str | None = None # ISO "2026-07-02", best-effort (None on non-English markets)
watchers: int | None = None
coupon: str | None = None
rating: float | None = None
Expand Down
6 changes: 6 additions & 0 deletions tests/test_ebay.py
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,8 @@
"free_shipping": True,
"location": "United States",
"sold_count": 1200,
"sold_date": "2 Jul 2026",
"sold_date_at": "2026-07-02",
"watchers": 42,
"rating": 4.8,
"ratings_total": 530,
Expand Down Expand Up @@ -485,6 +487,8 @@ def test_completed_response(self) -> None:
resp = SearchResponse.model_validate(COMPLETED_RESPONSE)
assert resp.sold is True
assert len(resp.results) == 1
assert resp.results[0].sold_date == "2 Jul 2026"
assert resp.results[0].sold_date_at == "2026-07-02"

def test_item_detail_response(self) -> None:
resp = ItemDetailResponse.model_validate(ITEM_DETAIL_RESPONSE)
Expand Down Expand Up @@ -631,6 +635,8 @@ async def test_completed(
result = await search_client.completed("iphone 13", condition="used")
assert isinstance(result, SearchResponse)
assert result.sold is True
assert result.results[0].sold_date == "2 Jul 2026"
assert result.results[0].sold_date_at == "2026-07-02"
call_args = mock_base_client.get.call_args
assert call_args[0][0] == "/v1/ebay/completed"
assert call_args[1]["params"]["condition"] == "used"
Expand Down
2 changes: 1 addition & 1 deletion uv.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading