Listing

Advert for a property that is for sale or for rent, the listing actually refers to the listing agreement that is made between a principal and an agent, regarding marketing of a property.

To use EverReal playground is required to provide the Bearer token, read more in Master Data page

Important information

Amenities

Parking can have 2 values:

  • null if the listing does not have amenity "Has Parking" checked

  • {type, quality} if the listing has amenity "Has Parking" checked

Pictures and documents

There are 4 important document properties: {coverPicture,pictures,documents,floorPlans}

The base path of pictures is formed of the baseUrl + "/" picture.resourcePath .The base url is https://resources.everreal.co

Query

To understand what is necessary and how to use GraphQl, in Master Data page we explain what is necessary to do

Ideal CSV Structure
type Query {
  listings(input: ListingFilterListPaging): [Listing]
  avgListingActivity(input: AvgActivityFilter): AvgListingActivity
  listingCounts(input: ListingCountsFilter): ListingCounts
}

type AvgListingActivity {
  activeListings: Int
}

type ListingCounts {
  listingsMissingViewings: Int
  listingsMissingContracts: Int
  activeAndPublished: Int
  olderThan30Days: Int
  listingsInContracting: Int
  listingsContractingCompleted: Int
  listingsMoveinCompleted: Int
}

type Listing {
  id: String
  title: String
  type: String
  isArchived: Boolean
  isActive: Boolean
  companyId: String
  listingResponsible: User
  contractDetails: ListingContractDetails
  coverPicture: IFile
  pictures: [IFile]
  documents: [IFile]
  floorplans: [IFile]
  company: Company
  status: LISTING_STATUS
  amenities: ListingAmenities
  listingInformation: ListingInformation
  availableFrom: Date
  propertyId: String
  property: Property
  unitId: String
  unit: Unit
  descriptions: ListingDescription
  createdAt: DateTime
  updatedAt: DateTime
}

type ListingAmenities {
  amenitiesIncluded: [AMENITIES_INCLUDED] # See this type under units page
  parking: UnitParkingType # See this type under units page
  qualityOfAmenities: String
  condition: String
  lastRenovationYear: Int
  heatingType: String
  mainEnergySource: String
  energyPerformanceCertificateAvailability: ENERGY_PERFORMANCE_CERTIFICATE_AVAILABILITY
  energyCertificateCreationDate: ENERGY_CERTIFICATE_CREATION_DATE
  buildingEnergyRatingType: BUILDING_ENERGY_RATING_TYPE
  thermalCharacteristic: Float
  energyConsumptionContainsWarmWater: Boolean
  energyEfficiencyClass: ENERGY_EFFICIENCY_CLASS
}

type ListingDescription {
  object: String
  amenities: String
  location: String
  other: String
}

type ListingContractDetails {
  currency: String
  rent: Float
  totalMonthlyRent: Float
  parkingRent: Float
  deposit: Float
  heatingCostsIncluded: Boolean
  utilityCosts: Float
  heatingCosts: Float
  petsAllowed: String
  displayAmount: Float
  hasCommission: Boolean
  commission: String
  commissionNote: String
  commissionType: String
}

enum UNIT_TYPE {
  APARTMENT
  HOUSE
  PARKING
  OFFICE
  STORE
  GASTRONOMY
  INDUSTRY
  SPECIAL_PURPOSE
  LAN
}

enum LISTING_TYPE {
  RENT_APARTMENT
  SELL_APARTMENT
  RENT_SHORT_TERM_APARTMENT
  RENT_HOUSE
  SELL_HOUSE
  RENT_PARKING
  SELL_PARKING
  RENT_RESIDENTIAL_LAND
  SELL_RESIDENTIAL_LAND
  RENT_OFFICE
  SELL_OFFICE
  RENT_STORE
  SELL_STORE
  RENT_GASTRONOMY
  SELL_GASTRONOMY
  RENT_INDUSTRY
  SELL_INDUSTRY
  RENT_SPECIAL_PURPOSE
  SELL_SPECIAL_PURPOSE
  RENT_COMMERCIAL_LAND
  SELL_COMMERCIAL_LAND
}

enum LISTING_STATUS {
  OPEN_FOR_CANDIDATES
  OPEN_FOR_APPLICANTS
  CONTRACTING_STARTED
  CONTRACTING_COMPLETED
  MOVE_IN_COMPLETED
  IS_INACTIVE
  IS_ARCHIVED
}

enum CANDIDATE_SOURCE {
  APPLIED_EVERREAL
  MANUAL_EVERREAL_CANDIDATE
  MANUAL_EVERREAL_SCHEDULED
  MANUAL_EVERREAL_APPLICANT
  IMMOSCOUT24
  WG_GESUCHT
  IMMOWELT
  IMMONET
  IVD24
  NWZ
  OPENIMMO_GENERIC
  EBAY
  OFFLINE_CONTRACT
}

input ListingFilter {
  from: Date
  to: Date
  candidateSources: [CANDIDATE_SOURCE]
  companyId: String
  propertyGroupId: String
  propertyId: String
  ownerId: String
  listingId: String
  external: Boolean
  fullSearch: String
  isArchived: Boolean
  isActive: Boolean
  internalAdvertiseId: String
  availableFrom: Date
  externalPropertyId: String
  scoringTemplateId: String
  propertyCity: String
  propertyName: String
  propertyStreet: String
  listingType: LISTING_TYPE
  status: LISTING_STATUS
  responsibleFullName: String
  unitName: String
  unitId: String
  externalUnitId: String
  unitType: UNIT_TYPE
  priceMin: Float
  priceMax: Float
  roomsMin: Int
  roomsMax: Int
  surfaceMin: Int
  surfaceMax: Int
  livingSurfaceMin: Int
  livingSurfaceMax: Int
  heightMax: Int
  heightMin: Int
  listingResponsibleUserId: String
  projectId: String
  candidateEmail: String
  candidateIsWinner: Boolean
}

input ListingFilterListPaging {
  filter: ListingFilter
  paging: GraphPaging
  sort: GraphSorting
}

input ListingCountsFilter {
  userId: String
  companyId: String
}

Usage:

Query:

  query listingsQuery(
    $from: Date
    $to: Date
    $companyId: String
    $propertyId: String
    $propertyGroupId: String
    $ownerId: String
    $listingId: String
    $isArchived: Boolean
    $isActive: Boolean
    $fullSearch: String
  ) {
    listings(
      input: {
        paging: { take: 100, skip: 0 }
        filter: {
          from: $from
          to: $to
          companyId: $companyId
          propertyGroupId: $propertyGroupId
          propertyId: $propertyId
          ownerId: $ownerId
          listingId: $listingId
          isArchived: $isArchived
          isActive: $isActive
          fullSearch: $fullSearch
        }
      }
    ) {
      id
      title
      type
      isArchived
      isActive
      companyId
      amenities{
        amenitiesIncluded
        qualityOfAmenities
        parking {type quantity}
        energyPerformanceCertificateAvailability
        energyCertificateCreationDate
        buildingEnergyRatingType
        thermalCharacteristic
        energyConsumptionContainsWarmWater
        energyEfficiencyClass
      }
      coverPicture {
        name
        resourceId
        resourcePath
        size
        type
        order
        isCoverPicture
      }
      pictures  {
        name
        resourceId
        resourcePath
        size
        type
        order
        isCoverPicture
      }
      documents   {
        name
        resourceId
        resourcePath
        size
        type
        order
        isCoverPicture
      }
      floorplans  {
        name
        resourceId
        resourcePath
        size
        type
        order
        isCoverPicture
      }
      property {
        objectId
        name
        category
        subtype
        type
        ownershipType
        fullAddress
      }
      unit {
        id
        objectId
        name
        category
        type
        subtype
        leasingStatusEnum
        leasingStatusesEnum
        statusesEnum
        floorNumber
        surface
        livingSurface
        netFloorSurface
        hasMainStorage
      }
      contractDetails {
        currency
        rent
        totalMonthlyRent
        parkingRent
        deposit
        heatingCostsIncluded
        utilityCosts
        heatingCosts
        petsAllowed
        displayAmount
        hasCommission
        commission
        commissionNote
        commissionType
      }
    }
  }

Variables:

You can used any variable in ListingFilter to

{
  "listingId": "fce90f3a-b8e4-4bc6-b6c0-2539acef5cdc",
  "propertyId": "e7cde0a1-9708-4fce-b36e-d8b8bcaa695f",
  "isActive": true,
  "isArchived": false,
  "fullSearch": "Hermannstrasse"
}

Should l be something like this.

Mutation

Mutations are responsible to update a specific operations like activating, deactivating listing or archiving or unarchiving listing.

type Mutation {
  updateListing(listing: ListingInput): Listing
}

Here are details on the capabilities of different mutations

  • updateListing: Is used to perform update on an listing with the help of a listing Id, this will help is performing some basic operations listed below

Schema Definition

input ListingInput {
  id: String!
  action: LISTING_ACTIONS!
}

enum LISTING_ACTIONS {
  ACTIVATE_LISTING
  DEACTIVATE_LISTING
  ARCHIVE_LISTING
  UNARCHIVE_LISTING
}

Below we are providing a full example how to update listing, all this information is not required, only the ones that was using ! notation previously.


mutation {
  updateListing(
    listing: {
      id: "42b751a6-3eb6-4e48-a0d1-8e9959151672"
      action: ACTIVATE_LISTING
    }
  ) {
    id
  }
}

Last updated