public long addPropsect(String json) 
      throws JsonSyntaxException, EntityNotFoundException {
    Gson gson = new Gson();
    ProspectInput pIn = gson.fromJson(json, ProspectInput.class);
    Entity entity = new Entity(R.Prospect.ENTITY_TYPE);
    
    // Set Properties
    entity.setProperty(R.Prospect.PROFILE, 
        new Text(gson.toJson(pIn.getProfile())));
    entity.setProperty(R.Prospect.RANKINGS,
        new Text(gson.toJson(pIn.getRankings())));
    entity.setProperty(R.Prospect.STATS, 
        new Text(gson.toJson(pIn.getStats())));
    entity.setProperty(R.Prospect.NOTES, 
        new Text(gson.toJson(pIn.getNotes())));
    entity.setProperty(R.Prospect.AWARDS, 
        new Text(gson.toJson(pIn.getAwards())));
    entity.setProperty(R.Prospect.COMBINE, 
        new Text(gson.toJson(pIn.getCombine())));
    entity.setProperty(R.Prospect.BREAKDOWN, 
        new Text(gson.toJson(pIn.getBreakdown())));
    entity.setProperty(R.Prospect.VIDEOS, 
        new Text(gson.toJson(pIn.getVideos())));
    entity.setProperty(R.Prospect.ORANK, 
        pIn.getRankings().getOverallRank()); // For limit,offset
    long id = datastore.put(entity).getId();
    
    // Create string w/ searchable fields
    // Player name
    ProspectOutput pOut = pIn.convertToOutput();
    StringBuilder builder = new StringBuilder();
    ProfileOutput profile = pOut.getProfile();
    builder.append(profile.getName());
    builder.append(" ");
    
    // Alternative player names
    for(int index = 0; index < profile.getAltNames().size(); ++index) {
      builder.append(profile.getAltNames().get(index));
      builder.append(" ");
    }
    
    // Position name and alt position names
    Position position = pOut.getProfile().getPosition();
    builder.append(position.getName());
    builder.append(" ");
    for(int index = 0; index < position.getAltNames().size(); ++index) {
      builder.append(position.getAltNames().get(index));
      builder.append(" ");
    }
    
    // School name, mascot, and alt school names
    School school = pOut.getProfile().getSchool();
    builder.append(school.getName());
    builder.append(" ");
    builder.append(school.getMascot());
    builder.append(" ");
    for(int index = 0; index < school.getAltNames().size(); ++index) {
      builder.append(school.getAltNames().get(index));
      builder.append(" ");
    }
   
    // Create searchable document
    String docId = Long.toString(id);
    Document doc = Document.newBuilder()
        .setId(docId)
        .addField(Field.newBuilder().setName(R.Doc.FIELDS)
            .setText(builder.toString().toLowerCase()))
        .build();
    
    // Add document to index
    IndexSpec indexSpec = IndexSpec.newBuilder().setName(R.Doc.INDEX).build();
    Index index = SearchServiceFactory.getSearchService().getIndex(indexSpec);
    
    try {
      index.put(doc);
    } 
    catch (PutException e) {
      if (StatusCode.TRANSIENT_ERROR.equals(e.getOperationResult().getCode())) {
        // TODO
      }
    }
    
    return id;
  }