You will need to build a custom script to identify the assets, and use Content Management API (CMA) to delete it automatically.
Records in a draft status which are more than X weeks old
Using parameter sys.createdAt[gt]=2019-01-01T00:00:00.000Z to query all asset, in the API response, if an asset is not published, it doesn’t have publishedVersion attribute, you can use it as an indicator for draft asset.
Archived records
In API response of querying asset collection, for archived asset, you can find archivedVersion attribute
Records in a published status but we have a custom ‘active until’ field which means they are not displayed on the website after that date
Query entry collection with parameter, content_type={content-type-id}&fields.{field-id-active-until}[gte]=2019-01-01T00:00:00.000Z
Media assets which are no longer attached to a content item or linked to from a content item
When using endpoint, Content Delivery API | Contentful, in the API response, when “total”: 0, it means the asset isn’t linked from any entry